Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions
remote_node_table.h File Reference
#include "isci.h"

Go to the source code of this file.

Data Structures

struct  sci_remote_node_table
 

Macros

#define SCIC_SDS_REMOTE_NODE_SETS_PER_BYTE   2
 
#define SCIC_SDS_REMOTE_NODE_SETS_PER_DWORD   (sizeof(u32) * SCIC_SDS_REMOTE_NODE_SETS_PER_BYTE)
 
#define SCIC_SDS_REMOTE_NODES_PER_BYTE   (SCU_STP_REMOTE_NODE_COUNT * SCIC_SDS_REMOTE_NODE_SETS_PER_BYTE)
 
#define SCIC_SDS_REMOTE_NODES_PER_DWORD   (sizeof(u32) * SCIC_SDS_REMOTE_NODES_PER_BYTE)
 
#define SCIC_SDS_REMOTE_NODES_BITS_PER_GROUP   4
 
#define SCIC_SDS_REMOTE_NODE_TABLE_INVALID_INDEX   (0xFFFFFFFF)
 
#define SCIC_SDS_REMOTE_NODE_TABLE_FULL_SLOT_VALUE   (0x07)
 
#define SCIC_SDS_REMOTE_NODE_TABLE_EMPTY_SLOT_VALUE   (0x00)
 
#define SCU_STP_REMOTE_NODE_COUNT   3
 
#define SCU_SSP_REMOTE_NODE_COUNT   1
 
#define SCU_SATA_REMOTE_NODE_COUNT   1
 

Functions

void sci_remote_node_table_initialize (struct sci_remote_node_table *remote_node_table, u32 remote_node_entries)
 
u16 sci_remote_node_table_allocate_remote_node (struct sci_remote_node_table *remote_node_table, u32 remote_node_count)
 
void sci_remote_node_table_release_remote_node_index (struct sci_remote_node_table *remote_node_table, u32 remote_node_count, u16 remote_node_index)
 

Macro Definition Documentation

#define SCIC_SDS_REMOTE_NODE_SETS_PER_BYTE   2

Remote node sets are sets of remote node index in the remtoe node table The SCU hardware requires that STP remote node entries take three consecutive remote node index so the table is arranged in sets of three. The bits are used as 0111 0111 to make a byte and the bits define the set of three remote nodes to use as a sequence.

Definition at line 70 of file remote_node_table.h.

#define SCIC_SDS_REMOTE_NODE_SETS_PER_DWORD   (sizeof(u32) * SCIC_SDS_REMOTE_NODE_SETS_PER_BYTE)

Since the remote node table is organized as DWORDS take the remote node sets in bytes and represent them in DWORDs. The lowest ordered bits are the ones used in case full DWORD is not being used. i.e. 0000 0000 0000 0000 0111 0111 0111 0111 // if only a single WORD is in use in the DWORD.

Definition at line 80 of file remote_node_table.h.

#define SCIC_SDS_REMOTE_NODE_TABLE_EMPTY_SLOT_VALUE   (0x00)

Definition at line 109 of file remote_node_table.h.

#define SCIC_SDS_REMOTE_NODE_TABLE_FULL_SLOT_VALUE   (0x07)

Definition at line 108 of file remote_node_table.h.

#define SCIC_SDS_REMOTE_NODE_TABLE_INVALID_INDEX   (0xFFFFFFFF)

Definition at line 107 of file remote_node_table.h.

#define SCIC_SDS_REMOTE_NODES_BITS_PER_GROUP   4

This is the number of bits in a remote node group

Definition at line 105 of file remote_node_table.h.

#define SCIC_SDS_REMOTE_NODES_PER_BYTE   (SCU_STP_REMOTE_NODE_COUNT * SCIC_SDS_REMOTE_NODE_SETS_PER_BYTE)

This is a count of the numeber of remote nodes that can be represented in a byte

Definition at line 88 of file remote_node_table.h.

#define SCIC_SDS_REMOTE_NODES_PER_DWORD   (sizeof(u32) * SCIC_SDS_REMOTE_NODES_PER_BYTE)

This is a count of the number of remote nodes that can be represented in a DWROD

Definition at line 97 of file remote_node_table.h.

#define SCU_SATA_REMOTE_NODE_COUNT   1

Direct attached STP remote node count

Definition at line 130 of file remote_node_table.h.

#define SCU_SSP_REMOTE_NODE_COUNT   1

Expander or direct attached ssp remote node count

Definition at line 123 of file remote_node_table.h.

#define SCU_STP_REMOTE_NODE_COUNT   3

Expander attached sata remote node count

Definition at line 116 of file remote_node_table.h.

Function Documentation

u16 sci_remote_node_table_allocate_remote_node ( struct sci_remote_node_table remote_node_table,
u32  remote_node_count 
)

: This is the remote node table from which the remote node allocation is to take place. : This is ther remote node count which is one of SCU_SSP_REMOTE_NODE_COUNT(1) or SCU_STP_REMOTE_NODE_COUNT(3).

This method will allocate a remote node that mataches the remote node count specified by the caller. Valid values for remote node count is SCU_SSP_REMOTE_NODE_COUNT(1) or SCU_STP_REMOTE_NODE_COUNT(3). u16 This is the remote node index that is returned or an invalid remote node context.

Definition at line 476 of file remote_node_table.c.

void sci_remote_node_table_initialize ( struct sci_remote_node_table remote_node_table,
u32  remote_node_entries 
)

]: remote_node_table The remote that which is to be initialized. : The number of entries to put in the table.

This method will initialize the remote node table for use. none

Definition at line 316 of file remote_node_table.c.

void sci_remote_node_table_release_remote_node_index ( struct sci_remote_node_table remote_node_table,
u32  remote_node_count,
u16  remote_node_index 
)

: The remote node table to which the remote node index is to be freed. : This is the count of consecutive remote nodes that are to be freed.

This method will release the remote node index back into the remote node table free pool.

Definition at line 585 of file remote_node_table.c.