lpfc_hw.h (2e0fef85e098f6794956b8b80b111179fbb4cbb7) lpfc_hw.h (ed957684294618602b48f1950b0c9bbcb036583f)
1/*******************************************************************
2 * This file is part of the Emulex Linux Device Driver for *
3 * Fibre Channel Host Bus Adapters. *
4 * Copyright (C) 2004-2007 Emulex. All rights reserved. *
5 * EMULEX and SLI are trademarks of Emulex. *
6 * www.emulex.com *
7 * *
8 * This program is free software; you can redistribute it and/or *

--- 45 unchanged lines hidden (view full) ---

54#define SLI2_IOCB_RSP_R1XTRA_ENTRIES 52 /* SLI-2 extra FCP rsp ring entries */
55#define SLI2_IOCB_CMD_R2_ENTRIES 20 /* SLI-2 ELS command ring entries */
56#define SLI2_IOCB_RSP_R2_ENTRIES 20 /* SLI-2 ELS response ring entries */
57#define SLI2_IOCB_CMD_R3_ENTRIES 0
58#define SLI2_IOCB_RSP_R3_ENTRIES 0
59#define SLI2_IOCB_CMD_R3XTRA_ENTRIES 24
60#define SLI2_IOCB_RSP_R3XTRA_ENTRIES 32
61
1/*******************************************************************
2 * This file is part of the Emulex Linux Device Driver for *
3 * Fibre Channel Host Bus Adapters. *
4 * Copyright (C) 2004-2007 Emulex. All rights reserved. *
5 * EMULEX and SLI are trademarks of Emulex. *
6 * www.emulex.com *
7 * *
8 * This program is free software; you can redistribute it and/or *

--- 45 unchanged lines hidden (view full) ---

54#define SLI2_IOCB_RSP_R1XTRA_ENTRIES 52 /* SLI-2 extra FCP rsp ring entries */
55#define SLI2_IOCB_CMD_R2_ENTRIES 20 /* SLI-2 ELS command ring entries */
56#define SLI2_IOCB_RSP_R2_ENTRIES 20 /* SLI-2 ELS response ring entries */
57#define SLI2_IOCB_CMD_R3_ENTRIES 0
58#define SLI2_IOCB_RSP_R3_ENTRIES 0
59#define SLI2_IOCB_CMD_R3XTRA_ENTRIES 24
60#define SLI2_IOCB_RSP_R3XTRA_ENTRIES 32
61
62#define SLI2_IOCB_CMD_SIZE 32
63#define SLI2_IOCB_RSP_SIZE 32
64#define SLI3_IOCB_CMD_SIZE 128
65#define SLI3_IOCB_RSP_SIZE 64
66
62/* Common Transport structures and definitions */
63
64union CtRevisionId {
65 /* Structure is in Big Endian format */
66 struct {
67 uint32_t Revision:8;
68 uint32_t InId:24;
69 } bits;

--- 1180 unchanged lines hidden (view full) ---

1250#define MBX_RUN_PROGRAM 0x1E
1251#define MBX_SET_MASK 0x20
1252#define MBX_SET_SLIM 0x21
1253#define MBX_UNREG_D_ID 0x23
1254#define MBX_KILL_BOARD 0x24
1255#define MBX_CONFIG_FARP 0x25
1256#define MBX_BEACON 0x2A
1257
67/* Common Transport structures and definitions */
68
69union CtRevisionId {
70 /* Structure is in Big Endian format */
71 struct {
72 uint32_t Revision:8;
73 uint32_t InId:24;
74 } bits;

--- 1180 unchanged lines hidden (view full) ---

1255#define MBX_RUN_PROGRAM 0x1E
1256#define MBX_SET_MASK 0x20
1257#define MBX_SET_SLIM 0x21
1258#define MBX_UNREG_D_ID 0x23
1259#define MBX_KILL_BOARD 0x24
1260#define MBX_CONFIG_FARP 0x25
1261#define MBX_BEACON 0x2A
1262
1263#define MBX_CONFIG_HBQ 0x7C
1258#define MBX_LOAD_AREA 0x81
1259#define MBX_RUN_BIU_DIAG64 0x84
1260#define MBX_CONFIG_PORT 0x88
1261#define MBX_READ_SPARM64 0x8D
1262#define MBX_READ_RPI64 0x8F
1263#define MBX_REG_LOGIN64 0x93
1264#define MBX_READ_LA64 0x95
1265

--- 63 unchanged lines hidden (view full) ---

1329#define CMD_FCP_IREAD64_CR 0x9A
1330#define CMD_FCP_IREAD64_CX 0x9B
1331#define CMD_FCP_ICMND64_CR 0x9C
1332#define CMD_FCP_ICMND64_CX 0x9D
1333#define CMD_FCP_TSEND64_CX 0x9F
1334#define CMD_FCP_TRECEIVE64_CX 0xA1
1335#define CMD_FCP_TRSP64_CX 0xA3
1336
1264#define MBX_LOAD_AREA 0x81
1265#define MBX_RUN_BIU_DIAG64 0x84
1266#define MBX_CONFIG_PORT 0x88
1267#define MBX_READ_SPARM64 0x8D
1268#define MBX_READ_RPI64 0x8F
1269#define MBX_REG_LOGIN64 0x93
1270#define MBX_READ_LA64 0x95
1271

--- 63 unchanged lines hidden (view full) ---

1335#define CMD_FCP_IREAD64_CR 0x9A
1336#define CMD_FCP_IREAD64_CX 0x9B
1337#define CMD_FCP_ICMND64_CR 0x9C
1338#define CMD_FCP_ICMND64_CX 0x9D
1339#define CMD_FCP_TSEND64_CX 0x9F
1340#define CMD_FCP_TRECEIVE64_CX 0xA1
1341#define CMD_FCP_TRSP64_CX 0xA3
1342
1343#define CMD_IOCB_RCV_SEQ64_CX 0xB5
1344#define CMD_IOCB_RCV_ELS64_CX 0xB7
1345#define CMD_IOCB_RCV_CONT64_CX 0xBB
1346
1337#define CMD_GEN_REQUEST64_CR 0xC2
1338#define CMD_GEN_REQUEST64_CX 0xC3
1339
1340#define CMD_MAX_IOCB_CMD 0xE6
1341#define CMD_IOCB_MASK 0xff
1342
1343#define MAX_MSG_DATA 28 /* max msg data in CMD_ADAPTER_MSG
1344 iocb */

--- 210 unchanged lines hidden (view full) ---

1555 uint8_t fabric_AL_PA; /* If using a Fabric Assigned AL_PA */
1556#endif
1557
1558#define FLAGS_LOCAL_LB 0x01 /* link_flags (=1) ENDEC loopback */
1559#define FLAGS_TOPOLOGY_MODE_LOOP_PT 0x00 /* Attempt loop then pt-pt */
1560#define FLAGS_TOPOLOGY_MODE_PT_PT 0x02 /* Attempt pt-pt only */
1561#define FLAGS_TOPOLOGY_MODE_LOOP 0x04 /* Attempt loop only */
1562#define FLAGS_TOPOLOGY_MODE_PT_LOOP 0x06 /* Attempt pt-pt then loop */
1347#define CMD_GEN_REQUEST64_CR 0xC2
1348#define CMD_GEN_REQUEST64_CX 0xC3
1349
1350#define CMD_MAX_IOCB_CMD 0xE6
1351#define CMD_IOCB_MASK 0xff
1352
1353#define MAX_MSG_DATA 28 /* max msg data in CMD_ADAPTER_MSG
1354 iocb */

--- 210 unchanged lines hidden (view full) ---

1565 uint8_t fabric_AL_PA; /* If using a Fabric Assigned AL_PA */
1566#endif
1567
1568#define FLAGS_LOCAL_LB 0x01 /* link_flags (=1) ENDEC loopback */
1569#define FLAGS_TOPOLOGY_MODE_LOOP_PT 0x00 /* Attempt loop then pt-pt */
1570#define FLAGS_TOPOLOGY_MODE_PT_PT 0x02 /* Attempt pt-pt only */
1571#define FLAGS_TOPOLOGY_MODE_LOOP 0x04 /* Attempt loop only */
1572#define FLAGS_TOPOLOGY_MODE_PT_LOOP 0x06 /* Attempt pt-pt then loop */
1573#define FLAGS_UNREG_LOGIN_ALL 0x08 /* UNREG_LOGIN all on link down */
1563#define FLAGS_LIRP_LILP 0x80 /* LIRP / LILP is disabled */
1564
1565#define FLAGS_TOPOLOGY_FAILOVER 0x0400 /* Bit 10 */
1566#define FLAGS_LINK_SPEED 0x0800 /* Bit 11 */
1567#define FLAGS_IMED_ABORT 0x04000 /* Bit 14 */
1568
1569 uint32_t link_speed;
1570#define LINK_SPEED_AUTO 0 /* Auto selection */

--- 241 unchanged lines hidden (view full) ---

1812typedef struct {
1813 uint32_t rsvd1;
1814 uint32_t rsvd2;
1815 union {
1816 struct ulp_bde sp; /* This BDE points to struct serv_parm
1817 structure */
1818 struct ulp_bde64 sp64;
1819 } un;
1574#define FLAGS_LIRP_LILP 0x80 /* LIRP / LILP is disabled */
1575
1576#define FLAGS_TOPOLOGY_FAILOVER 0x0400 /* Bit 10 */
1577#define FLAGS_LINK_SPEED 0x0800 /* Bit 11 */
1578#define FLAGS_IMED_ABORT 0x04000 /* Bit 14 */
1579
1580 uint32_t link_speed;
1581#define LINK_SPEED_AUTO 0 /* Auto selection */

--- 241 unchanged lines hidden (view full) ---

1823typedef struct {
1824 uint32_t rsvd1;
1825 uint32_t rsvd2;
1826 union {
1827 struct ulp_bde sp; /* This BDE points to struct serv_parm
1828 structure */
1829 struct ulp_bde64 sp64;
1830 } un;
1831#ifdef __BIG_ENDIAN_BITFIELD
1832 uint16_t rsvd3;
1833 uint16_t vpi;
1834#else /* __LITTLE_ENDIAN_BITFIELD */
1835 uint16_t vpi;
1836 uint16_t rsvd3;
1837#endif
1820} READ_SPARM_VAR;
1821
1822/* Structure for MB Command READ_STATUS (14) */
1823
1824typedef struct {
1825#ifdef __BIG_ENDIAN_BITFIELD
1826 uint32_t rsvd1:31;
1827 uint32_t clrCounters:1;

--- 84 unchanged lines hidden (view full) ---

1912} READ_XRI_VAR;
1913
1914/* Structure for MB Command READ_REV (17) */
1915
1916typedef struct {
1917#ifdef __BIG_ENDIAN_BITFIELD
1918 uint32_t cv:1;
1919 uint32_t rr:1;
1838} READ_SPARM_VAR;
1839
1840/* Structure for MB Command READ_STATUS (14) */
1841
1842typedef struct {
1843#ifdef __BIG_ENDIAN_BITFIELD
1844 uint32_t rsvd1:31;
1845 uint32_t clrCounters:1;

--- 84 unchanged lines hidden (view full) ---

1930} READ_XRI_VAR;
1931
1932/* Structure for MB Command READ_REV (17) */
1933
1934typedef struct {
1935#ifdef __BIG_ENDIAN_BITFIELD
1936 uint32_t cv:1;
1937 uint32_t rr:1;
1920 uint32_t rsvd1:29;
1938 uint32_t rsvd2:2;
1939 uint32_t v3req:1;
1940 uint32_t v3rsp:1;
1941 uint32_t rsvd1:25;
1921 uint32_t rv:1;
1922#else /* __LITTLE_ENDIAN_BITFIELD */
1923 uint32_t rv:1;
1942 uint32_t rv:1;
1943#else /* __LITTLE_ENDIAN_BITFIELD */
1944 uint32_t rv:1;
1924 uint32_t rsvd1:29;
1945 uint32_t rsvd1:25;
1946 uint32_t v3rsp:1;
1947 uint32_t v3req:1;
1948 uint32_t rsvd2:2;
1925 uint32_t rr:1;
1926 uint32_t cv:1;
1927#endif
1928
1929 uint32_t biuRev;
1930 uint32_t smRev;
1931 union {
1932 uint32_t smFwRev;

--- 33 unchanged lines hidden (view full) ---

1966
1967 uint32_t postKernRev;
1968 uint32_t opFwRev;
1969 uint8_t opFwName[16];
1970 uint32_t sli1FwRev;
1971 uint8_t sli1FwName[16];
1972 uint32_t sli2FwRev;
1973 uint8_t sli2FwName[16];
1949 uint32_t rr:1;
1950 uint32_t cv:1;
1951#endif
1952
1953 uint32_t biuRev;
1954 uint32_t smRev;
1955 union {
1956 uint32_t smFwRev;

--- 33 unchanged lines hidden (view full) ---

1990
1991 uint32_t postKernRev;
1992 uint32_t opFwRev;
1993 uint8_t opFwName[16];
1994 uint32_t sli1FwRev;
1995 uint8_t sli1FwName[16];
1996 uint32_t sli2FwRev;
1997 uint8_t sli2FwName[16];
1974 uint32_t rsvd2;
1975 uint32_t RandomData[7];
1998 uint32_t sli3Feat;
1999 uint32_t RandomData[6];
1976} READ_REV_VAR;
1977
1978/* Structure for MB Command READ_LINK_STAT (18) */
1979
1980typedef struct {
1981 uint32_t rsvd1;
1982 uint32_t linkFailureCnt;
1983 uint32_t lossSyncCnt;

--- 23 unchanged lines hidden (view full) ---

2007 uint32_t rsvd2:8;
2008#endif
2009
2010 union {
2011 struct ulp_bde sp;
2012 struct ulp_bde64 sp64;
2013 } un;
2014
2000} READ_REV_VAR;
2001
2002/* Structure for MB Command READ_LINK_STAT (18) */
2003
2004typedef struct {
2005 uint32_t rsvd1;
2006 uint32_t linkFailureCnt;
2007 uint32_t lossSyncCnt;

--- 23 unchanged lines hidden (view full) ---

2031 uint32_t rsvd2:8;
2032#endif
2033
2034 union {
2035 struct ulp_bde sp;
2036 struct ulp_bde64 sp64;
2037 } un;
2038
2039#ifdef __BIG_ENDIAN_BITFIELD
2040 uint16_t rsvd6;
2041 uint16_t vpi;
2042#else /* __LITTLE_ENDIAN_BITFIELD */
2043 uint16_t vpi;
2044 uint16_t rsvd6;
2045#endif
2046
2015} REG_LOGIN_VAR;
2016
2017/* Word 30 contents for REG_LOGIN */
2018typedef union {
2019 struct {
2020#ifdef __BIG_ENDIAN_BITFIELD
2021 uint16_t rsvd1:12;
2022 uint16_t wd30_class:4;

--- 8 unchanged lines hidden (view full) ---

2031} REG_WD30;
2032
2033/* Structure for MB Command UNREG_LOGIN (20) */
2034
2035typedef struct {
2036#ifdef __BIG_ENDIAN_BITFIELD
2037 uint16_t rsvd1;
2038 uint16_t rpi;
2047} REG_LOGIN_VAR;
2048
2049/* Word 30 contents for REG_LOGIN */
2050typedef union {
2051 struct {
2052#ifdef __BIG_ENDIAN_BITFIELD
2053 uint16_t rsvd1:12;
2054 uint16_t wd30_class:4;

--- 8 unchanged lines hidden (view full) ---

2063} REG_WD30;
2064
2065/* Structure for MB Command UNREG_LOGIN (20) */
2066
2067typedef struct {
2068#ifdef __BIG_ENDIAN_BITFIELD
2069 uint16_t rsvd1;
2070 uint16_t rpi;
2071 uint32_t rsvd2;
2072 uint32_t rsvd3;
2073 uint32_t rsvd4;
2074 uint32_t rsvd5;
2075 uint16_t rsvd6;
2076 uint16_t vpi;
2039#else /* __LITTLE_ENDIAN_BITFIELD */
2040 uint16_t rpi;
2041 uint16_t rsvd1;
2077#else /* __LITTLE_ENDIAN_BITFIELD */
2078 uint16_t rpi;
2079 uint16_t rsvd1;
2080 uint32_t rsvd2;
2081 uint32_t rsvd3;
2082 uint32_t rsvd4;
2083 uint32_t rsvd5;
2084 uint16_t vpi;
2085 uint16_t rsvd6;
2042#endif
2043} UNREG_LOGIN_VAR;
2044
2045/* Structure for MB Command UNREG_D_ID (0x23) */
2046
2047typedef struct {
2048 uint32_t did;
2086#endif
2087} UNREG_LOGIN_VAR;
2088
2089/* Structure for MB Command UNREG_D_ID (0x23) */
2090
2091typedef struct {
2092 uint32_t did;
2093 uint32_t rsvd2;
2094 uint32_t rsvd3;
2095 uint32_t rsvd4;
2096 uint32_t rsvd5;
2097#ifdef __BIG_ENDIAN_BITFIELD
2098 uint16_t rsvd6;
2099 uint16_t vpi;
2100#else
2101 uint16_t vpi;
2102 uint16_t rsvd6;
2103#endif
2049} UNREG_D_ID_VAR;
2050
2051/* Structure for MB Command READ_LA (21) */
2052/* Structure for MB Command READ_LA64 (0x95) */
2053
2054typedef struct {
2055 uint32_t eventTag; /* Event tag */
2056#ifdef __BIG_ENDIAN_BITFIELD

--- 115 unchanged lines hidden (view full) ---

2172#define DMP_MEM_REG 0x1
2173#define DMP_NV_PARAMS 0x2
2174
2175#define DMP_REGION_VPD 0xe
2176#define DMP_VPD_SIZE 0x400 /* maximum amount of VPD */
2177#define DMP_RSP_OFFSET 0x14 /* word 5 contains first word of rsp */
2178#define DMP_RSP_SIZE 0x6C /* maximum of 27 words of rsp data */
2179
2104} UNREG_D_ID_VAR;
2105
2106/* Structure for MB Command READ_LA (21) */
2107/* Structure for MB Command READ_LA64 (0x95) */
2108
2109typedef struct {
2110 uint32_t eventTag; /* Event tag */
2111#ifdef __BIG_ENDIAN_BITFIELD

--- 115 unchanged lines hidden (view full) ---

2227#define DMP_MEM_REG 0x1
2228#define DMP_NV_PARAMS 0x2
2229
2230#define DMP_REGION_VPD 0xe
2231#define DMP_VPD_SIZE 0x400 /* maximum amount of VPD */
2232#define DMP_RSP_OFFSET 0x14 /* word 5 contains first word of rsp */
2233#define DMP_RSP_SIZE 0x6C /* maximum of 27 words of rsp data */
2234
2235struct hbq_mask {
2236#ifdef __BIG_ENDIAN_BITFIELD
2237 uint8_t tmatch;
2238 uint8_t tmask;
2239 uint8_t rctlmatch;
2240 uint8_t rctlmask;
2241#else /* __LITTLE_ENDIAN */
2242 uint8_t rctlmask;
2243 uint8_t rctlmatch;
2244 uint8_t tmask;
2245 uint8_t tmatch;
2246#endif
2247};
2180
2248
2249
2250/* Structure for MB Command CONFIG_HBQ (7c) */
2251
2252struct config_hbq_var {
2253#ifdef __BIG_ENDIAN_BITFIELD
2254 uint32_t rsvd1 :7;
2255 uint32_t recvNotify :1; /* Receive Notification */
2256 uint32_t numMask :8; /* # Mask Entries */
2257 uint32_t profile :8; /* Selection Profile */
2258 uint32_t rsvd2 :8;
2259#else /* __LITTLE_ENDIAN */
2260 uint32_t rsvd2 :8;
2261 uint32_t profile :8; /* Selection Profile */
2262 uint32_t numMask :8; /* # Mask Entries */
2263 uint32_t recvNotify :1; /* Receive Notification */
2264 uint32_t rsvd1 :7;
2265#endif
2266
2267#ifdef __BIG_ENDIAN_BITFIELD
2268 uint32_t hbqId :16;
2269 uint32_t rsvd3 :12;
2270 uint32_t ringMask :4;
2271#else /* __LITTLE_ENDIAN */
2272 uint32_t ringMask :4;
2273 uint32_t rsvd3 :12;
2274 uint32_t hbqId :16;
2275#endif
2276
2277#ifdef __BIG_ENDIAN_BITFIELD
2278 uint32_t entry_count :16;
2279 uint32_t rsvd4 :8;
2280 uint32_t headerLen :8;
2281#else /* __LITTLE_ENDIAN */
2282 uint32_t headerLen :8;
2283 uint32_t rsvd4 :8;
2284 uint32_t entry_count :16;
2285#endif
2286
2287 uint32_t hbqaddrLow;
2288 uint32_t hbqaddrHigh;
2289
2290#ifdef __BIG_ENDIAN_BITFIELD
2291 uint32_t rsvd5 :31;
2292 uint32_t logEntry :1;
2293#else /* __LITTLE_ENDIAN */
2294 uint32_t logEntry :1;
2295 uint32_t rsvd5 :31;
2296#endif
2297
2298 uint32_t rsvd6; /* w7 */
2299 uint32_t rsvd7; /* w8 */
2300 uint32_t rsvd8; /* w9 */
2301
2302 struct hbq_mask hbqMasks[6];
2303
2304
2305 union {
2306 uint32_t allprofiles[12];
2307
2308 struct {
2309 #ifdef __BIG_ENDIAN_BITFIELD
2310 uint32_t seqlenoff :16;
2311 uint32_t maxlen :16;
2312 #else /* __LITTLE_ENDIAN */
2313 uint32_t maxlen :16;
2314 uint32_t seqlenoff :16;
2315 #endif
2316 #ifdef __BIG_ENDIAN_BITFIELD
2317 uint32_t rsvd1 :28;
2318 uint32_t seqlenbcnt :4;
2319 #else /* __LITTLE_ENDIAN */
2320 uint32_t seqlenbcnt :4;
2321 uint32_t rsvd1 :28;
2322 #endif
2323 uint32_t rsvd[10];
2324 } profile2;
2325
2326 struct {
2327 #ifdef __BIG_ENDIAN_BITFIELD
2328 uint32_t seqlenoff :16;
2329 uint32_t maxlen :16;
2330 #else /* __LITTLE_ENDIAN */
2331 uint32_t maxlen :16;
2332 uint32_t seqlenoff :16;
2333 #endif
2334 #ifdef __BIG_ENDIAN_BITFIELD
2335 uint32_t cmdcodeoff :28;
2336 uint32_t rsvd1 :12;
2337 uint32_t seqlenbcnt :4;
2338 #else /* __LITTLE_ENDIAN */
2339 uint32_t seqlenbcnt :4;
2340 uint32_t rsvd1 :12;
2341 uint32_t cmdcodeoff :28;
2342 #endif
2343 uint32_t cmdmatch[8];
2344
2345 uint32_t rsvd[2];
2346 } profile3;
2347
2348 struct {
2349 #ifdef __BIG_ENDIAN_BITFIELD
2350 uint32_t seqlenoff :16;
2351 uint32_t maxlen :16;
2352 #else /* __LITTLE_ENDIAN */
2353 uint32_t maxlen :16;
2354 uint32_t seqlenoff :16;
2355 #endif
2356 #ifdef __BIG_ENDIAN_BITFIELD
2357 uint32_t cmdcodeoff :28;
2358 uint32_t rsvd1 :12;
2359 uint32_t seqlenbcnt :4;
2360 #else /* __LITTLE_ENDIAN */
2361 uint32_t seqlenbcnt :4;
2362 uint32_t rsvd1 :12;
2363 uint32_t cmdcodeoff :28;
2364 #endif
2365 uint32_t cmdmatch[8];
2366
2367 uint32_t rsvd[2];
2368 } profile5;
2369
2370 } profiles;
2371
2372};
2373
2374
2375
2181/* Structure for MB Command CONFIG_PORT (0x88) */
2182typedef struct {
2376/* Structure for MB Command CONFIG_PORT (0x88) */
2377typedef struct {
2183 uint32_t pcbLen;
2378#ifdef __BIG_ENDIAN_BITFIELD
2379 uint32_t cBE : 1;
2380 uint32_t cET : 1;
2381 uint32_t cHpcb : 1;
2382 uint32_t cMA : 1;
2383 uint32_t sli_mode : 4;
2384 uint32_t pcbLen : 24; /* bit 23:0 of memory based port
2385 * config block */
2386#else /* __LITTLE_ENDIAN */
2387 uint32_t pcbLen : 24; /* bit 23:0 of memory based port
2388 * config block */
2389 uint32_t sli_mode : 4;
2390 uint32_t cMA : 1;
2391 uint32_t cHpcb : 1;
2392 uint32_t cET : 1;
2393 uint32_t cBE : 1;
2394#endif
2395
2184 uint32_t pcbLow; /* bit 31:0 of memory based port config block */
2185 uint32_t pcbHigh; /* bit 63:32 of memory based port config block */
2396 uint32_t pcbLow; /* bit 31:0 of memory based port config block */
2397 uint32_t pcbHigh; /* bit 63:32 of memory based port config block */
2186 uint32_t hbainit[5];
2398 uint32_t hbainit[6];
2399
2400#ifdef __BIG_ENDIAN_BITFIELD
2401 uint32_t rsvd : 24; /* Reserved */
2402 uint32_t cmv : 1; /* Configure Max VPIs */
2403 uint32_t ccrp : 1; /* Config Command Ring Polling */
2404 uint32_t csah : 1; /* Configure Synchronous Abort Handling */
2405 uint32_t chbs : 1; /* Cofigure Host Backing store */
2406 uint32_t cinb : 1; /* Enable Interrupt Notification Block */
2407 uint32_t cerbm : 1; /* Configure Enhanced Receive Buf Mgmt */
2408 uint32_t cmx : 1; /* Configure Max XRIs */
2409 uint32_t cmr : 1; /* Configure Max RPIs */
2410#else /* __LITTLE_ENDIAN */
2411 uint32_t cmr : 1; /* Configure Max RPIs */
2412 uint32_t cmx : 1; /* Configure Max XRIs */
2413 uint32_t cerbm : 1; /* Configure Enhanced Receive Buf Mgmt */
2414 uint32_t cinb : 1; /* Enable Interrupt Notification Block */
2415 uint32_t chbs : 1; /* Cofigure Host Backing store */
2416 uint32_t csah : 1; /* Configure Synchronous Abort Handling */
2417 uint32_t ccrp : 1; /* Config Command Ring Polling */
2418 uint32_t cmv : 1; /* Configure Max VPIs */
2419 uint32_t rsvd : 24; /* Reserved */
2420#endif
2421#ifdef __BIG_ENDIAN_BITFIELD
2422 uint32_t rsvd2 : 24; /* Reserved */
2423 uint32_t gmv : 1; /* Grant Max VPIs */
2424 uint32_t gcrp : 1; /* Grant Command Ring Polling */
2425 uint32_t gsah : 1; /* Grant Synchronous Abort Handling */
2426 uint32_t ghbs : 1; /* Grant Host Backing Store */
2427 uint32_t ginb : 1; /* Grant Interrupt Notification Block */
2428 uint32_t gerbm : 1; /* Grant ERBM Request */
2429 uint32_t gmx : 1; /* Grant Max XRIs */
2430 uint32_t gmr : 1; /* Grant Max RPIs */
2431#else /* __LITTLE_ENDIAN */
2432 uint32_t gmr : 1; /* Grant Max RPIs */
2433 uint32_t gmx : 1; /* Grant Max XRIs */
2434 uint32_t gerbm : 1; /* Grant ERBM Request */
2435 uint32_t ginb : 1; /* Grant Interrupt Notification Block */
2436 uint32_t ghbs : 1; /* Grant Host Backing Store */
2437 uint32_t gsah : 1; /* Grant Synchronous Abort Handling */
2438 uint32_t gcrp : 1; /* Grant Command Ring Polling */
2439 uint32_t gmv : 1; /* Grant Max VPIs */
2440 uint32_t rsvd2 : 24; /* Reserved */
2441#endif
2442
2443#ifdef __BIG_ENDIAN_BITFIELD
2444 uint32_t max_rpi : 16; /* Max RPIs Port should configure */
2445 uint32_t max_xri : 16; /* Max XRIs Port should configure */
2446#else /* __LITTLE_ENDIAN */
2447 uint32_t max_xri : 16; /* Max XRIs Port should configure */
2448 uint32_t max_rpi : 16; /* Max RPIs Port should configure */
2449#endif
2450
2451#ifdef __BIG_ENDIAN_BITFIELD
2452 uint32_t max_hbq : 16; /* Max HBQs Host expect to configure */
2453 uint32_t rsvd3 : 16; /* Max HBQs Host expect to configure */
2454#else /* __LITTLE_ENDIAN */
2455 uint32_t rsvd3 : 16; /* Max HBQs Host expect to configure */
2456 uint32_t max_hbq : 16; /* Max HBQs Host expect to configure */
2457#endif
2458
2459 uint32_t rsvd4; /* Reserved */
2460
2461#ifdef __BIG_ENDIAN_BITFIELD
2462 uint32_t rsvd5 : 16; /* Reserved */
2463 uint32_t max_vpi : 16; /* Max number of virt N-Ports */
2464#else /* __LITTLE_ENDIAN */
2465 uint32_t max_vpi : 16; /* Max number of virt N-Ports */
2466 uint32_t rsvd5 : 16; /* Reserved */
2467#endif
2468
2187} CONFIG_PORT_VAR;
2188
2189/* SLI-2 Port Control Block */
2190
2191/* SLIM POINTER */
2192#define SLIMOFF 0x30 /* WORD */
2193
2194typedef struct _SLI2_RDSC {

--- 61 unchanged lines hidden (view full) ---

2256 uint32_t IPAddress;
2257} CONFIG_FARP_VAR;
2258
2259/* Union of all Mailbox Command types */
2260#define MAILBOX_CMD_WSIZE 32
2261#define MAILBOX_CMD_SIZE (MAILBOX_CMD_WSIZE * sizeof(uint32_t))
2262
2263typedef union {
2469} CONFIG_PORT_VAR;
2470
2471/* SLI-2 Port Control Block */
2472
2473/* SLIM POINTER */
2474#define SLIMOFF 0x30 /* WORD */
2475
2476typedef struct _SLI2_RDSC {

--- 61 unchanged lines hidden (view full) ---

2538 uint32_t IPAddress;
2539} CONFIG_FARP_VAR;
2540
2541/* Union of all Mailbox Command types */
2542#define MAILBOX_CMD_WSIZE 32
2543#define MAILBOX_CMD_SIZE (MAILBOX_CMD_WSIZE * sizeof(uint32_t))
2544
2545typedef union {
2264 uint32_t varWords[MAILBOX_CMD_WSIZE - 1];
2265 LOAD_SM_VAR varLdSM; /* cmd = 1 (LOAD_SM) */
2266 READ_NV_VAR varRDnvp; /* cmd = 2 (READ_NVPARMS) */
2267 WRITE_NV_VAR varWTnvp; /* cmd = 3 (WRITE_NVPARMS) */
2546 uint32_t varWords[MAILBOX_CMD_WSIZE - 1]; /* first word is type/
2547 * feature/max ring number
2548 */
2549 LOAD_SM_VAR varLdSM; /* cmd = 1 (LOAD_SM) */
2550 READ_NV_VAR varRDnvp; /* cmd = 2 (READ_NVPARMS) */
2551 WRITE_NV_VAR varWTnvp; /* cmd = 3 (WRITE_NVPARMS) */
2268 BIU_DIAG_VAR varBIUdiag; /* cmd = 4 (RUN_BIU_DIAG) */
2269 INIT_LINK_VAR varInitLnk; /* cmd = 5 (INIT_LINK) */
2270 DOWN_LINK_VAR varDwnLnk; /* cmd = 6 (DOWN_LINK) */
2552 BIU_DIAG_VAR varBIUdiag; /* cmd = 4 (RUN_BIU_DIAG) */
2553 INIT_LINK_VAR varInitLnk; /* cmd = 5 (INIT_LINK) */
2554 DOWN_LINK_VAR varDwnLnk; /* cmd = 6 (DOWN_LINK) */
2271 CONFIG_LINK varCfgLnk; /* cmd = 7 (CONFIG_LINK) */
2272 PART_SLIM_VAR varSlim; /* cmd = 8 (PART_SLIM) */
2555 CONFIG_LINK varCfgLnk; /* cmd = 7 (CONFIG_LINK) */
2556 PART_SLIM_VAR varSlim; /* cmd = 8 (PART_SLIM) */
2273 CONFIG_RING_VAR varCfgRing; /* cmd = 9 (CONFIG_RING) */
2274 RESET_RING_VAR varRstRing; /* cmd = 10 (RESET_RING) */
2275 READ_CONFIG_VAR varRdConfig; /* cmd = 11 (READ_CONFIG) */
2276 READ_RCONF_VAR varRdRConfig; /* cmd = 12 (READ_RCONFIG) */
2277 READ_SPARM_VAR varRdSparm; /* cmd = 13 (READ_SPARM(64)) */
2278 READ_STATUS_VAR varRdStatus; /* cmd = 14 (READ_STATUS) */
2557 CONFIG_RING_VAR varCfgRing; /* cmd = 9 (CONFIG_RING) */
2558 RESET_RING_VAR varRstRing; /* cmd = 10 (RESET_RING) */
2559 READ_CONFIG_VAR varRdConfig; /* cmd = 11 (READ_CONFIG) */
2560 READ_RCONF_VAR varRdRConfig; /* cmd = 12 (READ_RCONFIG) */
2561 READ_SPARM_VAR varRdSparm; /* cmd = 13 (READ_SPARM(64)) */
2562 READ_STATUS_VAR varRdStatus; /* cmd = 14 (READ_STATUS) */
2279 READ_RPI_VAR varRdRPI; /* cmd = 15 (READ_RPI(64)) */
2280 READ_XRI_VAR varRdXRI; /* cmd = 16 (READ_XRI) */
2281 READ_REV_VAR varRdRev; /* cmd = 17 (READ_REV) */
2282 READ_LNK_VAR varRdLnk; /* cmd = 18 (READ_LNK_STAT) */
2563 READ_RPI_VAR varRdRPI; /* cmd = 15 (READ_RPI(64)) */
2564 READ_XRI_VAR varRdXRI; /* cmd = 16 (READ_XRI) */
2565 READ_REV_VAR varRdRev; /* cmd = 17 (READ_REV) */
2566 READ_LNK_VAR varRdLnk; /* cmd = 18 (READ_LNK_STAT) */
2283 REG_LOGIN_VAR varRegLogin; /* cmd = 19 (REG_LOGIN(64)) */
2284 UNREG_LOGIN_VAR varUnregLogin; /* cmd = 20 (UNREG_LOGIN) */
2567 REG_LOGIN_VAR varRegLogin; /* cmd = 19 (REG_LOGIN(64)) */
2568 UNREG_LOGIN_VAR varUnregLogin; /* cmd = 20 (UNREG_LOGIN) */
2285 READ_LA_VAR varReadLA; /* cmd = 21 (READ_LA(64)) */
2569 READ_LA_VAR varReadLA; /* cmd = 21 (READ_LA(64)) */
2286 CLEAR_LA_VAR varClearLA; /* cmd = 22 (CLEAR_LA) */
2570 CLEAR_LA_VAR varClearLA; /* cmd = 22 (CLEAR_LA) */
2287 DUMP_VAR varDmp; /* Warm Start DUMP mbx cmd */
2288 UNREG_D_ID_VAR varUnregDID; /* cmd = 0x23 (UNREG_D_ID) */
2289 CONFIG_FARP_VAR varCfgFarp; /* cmd = 0x25 (CONFIG_FARP) NEW_FEATURE */
2290 CONFIG_PORT_VAR varCfgPort; /* cmd = 0x88 (CONFIG_PORT) */
2571 DUMP_VAR varDmp; /* Warm Start DUMP mbx cmd */
2572 UNREG_D_ID_VAR varUnregDID; /* cmd = 0x23 (UNREG_D_ID) */
2573 CONFIG_FARP_VAR varCfgFarp; /* cmd = 0x25 (CONFIG_FARP)
2574 * NEW_FEATURE
2575 */
2576 struct config_hbq_var varCfgHbq;/* cmd = 0x7c (CONFIG_HBQ) */
2577 CONFIG_PORT_VAR varCfgPort; /* cmd = 0x88 (CONFIG_PORT) */
2291} MAILVARIANTS;
2292
2293/*
2294 * SLI-2 specific structures
2295 */
2296
2297struct lpfc_hgp {
2298 __le32 cmdPutInx;
2299 __le32 rspGetInx;
2300};
2301
2302struct lpfc_pgp {
2303 __le32 cmdGetInx;
2304 __le32 rspPutInx;
2305};
2306
2578} MAILVARIANTS;
2579
2580/*
2581 * SLI-2 specific structures
2582 */
2583
2584struct lpfc_hgp {
2585 __le32 cmdPutInx;
2586 __le32 rspGetInx;
2587};
2588
2589struct lpfc_pgp {
2590 __le32 cmdGetInx;
2591 __le32 rspPutInx;
2592};
2593
2307typedef struct _SLI2_DESC {
2308 struct lpfc_hgp host[MAX_RINGS];
2594struct sli2_desc {
2309 uint32_t unused1[16];
2595 uint32_t unused1[16];
2596 struct lpfc_hgp host[MAX_RINGS];
2310 struct lpfc_pgp port[MAX_RINGS];
2597 struct lpfc_pgp port[MAX_RINGS];
2311} SLI2_DESC;
2598};
2312
2599
2600struct sli3_desc {
2601 struct lpfc_hgp host[MAX_RINGS];
2602 uint32_t reserved[8];
2603 uint32_t hbq_put[16];
2604};
2605
2606struct sli3_pgp {
2607 struct lpfc_pgp port[MAX_RINGS];
2608 uint32_t hbq_get[16];
2609};
2610
2313typedef union {
2611typedef union {
2314 SLI2_DESC s2;
2612 struct sli2_desc s2;
2613 struct sli3_desc s3;
2614 struct sli3_pgp s3_pgp;
2315} SLI_VAR;
2316
2615} SLI_VAR;
2616
2617
2317typedef struct {
2318#ifdef __BIG_ENDIAN_BITFIELD
2319 uint16_t mbxStatus;
2320 uint8_t mbxCommand;
2321 uint8_t mbxReserved:6;
2322 uint8_t mbxHc:1;
2323 uint8_t mbxOwner:1; /* Low order bit first word */
2324#else /* __LITTLE_ENDIAN_BITFIELD */

--- 287 unchanged lines hidden (view full) ---

2612
2613/* IOCB Command template for all 64 bit FCP Target commands */
2614typedef struct {
2615 ULP_BDL bdl;
2616 uint32_t fcpt_Offset;
2617 uint32_t fcpt_Length; /* transfer ready for IWRITE */
2618} FCPT_FIELDS64;
2619
2618typedef struct {
2619#ifdef __BIG_ENDIAN_BITFIELD
2620 uint16_t mbxStatus;
2621 uint8_t mbxCommand;
2622 uint8_t mbxReserved:6;
2623 uint8_t mbxHc:1;
2624 uint8_t mbxOwner:1; /* Low order bit first word */
2625#else /* __LITTLE_ENDIAN_BITFIELD */

--- 287 unchanged lines hidden (view full) ---

2913
2914/* IOCB Command template for all 64 bit FCP Target commands */
2915typedef struct {
2916 ULP_BDL bdl;
2917 uint32_t fcpt_Offset;
2918 uint32_t fcpt_Length; /* transfer ready for IWRITE */
2919} FCPT_FIELDS64;
2920
2921/* IOCB Command template for CMD_IOCB_RCV_ELS64_CX (0xB7)
2922 or CMD_IOCB_RCV_SEQ64_CX (0xB5) */
2923
2924struct rcv_sli3 {
2925 uint32_t word8Rsvd;
2926#ifdef __BIG_ENDIAN_BITFIELD
2927 uint16_t vpi;
2928 uint16_t word9Rsvd;
2929#else /* __LITTLE_ENDIAN */
2930 uint16_t word9Rsvd;
2931 uint16_t vpi;
2932#endif
2933 uint32_t word10Rsvd;
2934 uint32_t acc_len; /* accumulated length */
2935 struct ulp_bde64 bde2;
2936};
2937
2620typedef struct _IOCB { /* IOCB structure */
2621 union {
2622 GENERIC_RSP grsp; /* Generic response */
2623 XR_SEQ_FIELDS xrseq; /* XMIT / BCAST / RCV_SEQUENCE cmd */
2624 struct ulp_bde cont[3]; /* up to 3 continuation bdes */
2625 RCV_ELS_REQ rcvels; /* RCV_ELS_REQ template */
2626 AC_XRI acxri; /* ABORT / CLOSE_XRI template */
2627 A_MXRI64 amxri; /* abort multiple xri command overlay */
2628 GET_RPI getrpi; /* GET_RPI template */
2629 FCPI_FIELDS fcpi; /* FCP Initiator template */
2630 FCPT_FIELDS fcpt; /* FCP target template */
2631
2632 /* SLI-2 structures */
2633
2938typedef struct _IOCB { /* IOCB structure */
2939 union {
2940 GENERIC_RSP grsp; /* Generic response */
2941 XR_SEQ_FIELDS xrseq; /* XMIT / BCAST / RCV_SEQUENCE cmd */
2942 struct ulp_bde cont[3]; /* up to 3 continuation bdes */
2943 RCV_ELS_REQ rcvels; /* RCV_ELS_REQ template */
2944 AC_XRI acxri; /* ABORT / CLOSE_XRI template */
2945 A_MXRI64 amxri; /* abort multiple xri command overlay */
2946 GET_RPI getrpi; /* GET_RPI template */
2947 FCPI_FIELDS fcpi; /* FCP Initiator template */
2948 FCPT_FIELDS fcpt; /* FCP target template */
2949
2950 /* SLI-2 structures */
2951
2634 struct ulp_bde64 cont64[2]; /* up to 2 64 bit continuation
2635 bde_64s */
2952 struct ulp_bde64 cont64[2]; /* up to 2 64 bit continuation
2953 * bde_64s */
2636 ELS_REQUEST64 elsreq64; /* ELS_REQUEST template */
2637 GEN_REQUEST64 genreq64; /* GEN_REQUEST template */
2638 RCV_ELS_REQ64 rcvels64; /* RCV_ELS_REQ template */
2639 XMT_SEQ_FIELDS64 xseq64; /* XMIT / BCAST cmd */
2640 FCPI_FIELDS64 fcpi64; /* FCP 64 bit Initiator template */
2641 FCPT_FIELDS64 fcpt64; /* FCP 64 bit target template */
2642
2643 uint32_t ulpWord[IOCB_WORD_SZ - 2]; /* generic 6 'words' */

--- 44 unchanged lines hidden (view full) ---

2688 uint32_t ulpCommand:8;
2689 uint32_t ulpClass:3;
2690 uint32_t ulpIr:1;
2691 uint32_t ulpPU:2;
2692 uint32_t ulpFCP2Rcvy:1;
2693 uint32_t ulpXS:1;
2694 uint32_t ulpTimeout:8;
2695#endif
2954 ELS_REQUEST64 elsreq64; /* ELS_REQUEST template */
2955 GEN_REQUEST64 genreq64; /* GEN_REQUEST template */
2956 RCV_ELS_REQ64 rcvels64; /* RCV_ELS_REQ template */
2957 XMT_SEQ_FIELDS64 xseq64; /* XMIT / BCAST cmd */
2958 FCPI_FIELDS64 fcpi64; /* FCP 64 bit Initiator template */
2959 FCPT_FIELDS64 fcpt64; /* FCP 64 bit target template */
2960
2961 uint32_t ulpWord[IOCB_WORD_SZ - 2]; /* generic 6 'words' */

--- 44 unchanged lines hidden (view full) ---

3006 uint32_t ulpCommand:8;
3007 uint32_t ulpClass:3;
3008 uint32_t ulpIr:1;
3009 uint32_t ulpPU:2;
3010 uint32_t ulpFCP2Rcvy:1;
3011 uint32_t ulpXS:1;
3012 uint32_t ulpTimeout:8;
3013#endif
3014 union {
3015 struct rcv_sli3 rcvsli3; /* words 8 - 15 */
3016 uint32_t sli3Words[24]; /* 96 extra bytes for SLI-3 */
3017 } unsli3;
2696
3018
3019#define ulpCt_h ulpXS
3020#define ulpCt_l ulpFCP2Rcvy
3021
3022#define IOCB_FCP 1 /* IOCB is used for FCP ELS cmds-ulpRsvByte */
3023#define IOCB_IP 2 /* IOCB is used for IP ELS cmds */
2697#define PARM_UNUSED 0 /* PU field (Word 4) not used */
2698#define PARM_REL_OFF 1 /* PU field (Word 4) = R. O. */
2699#define PARM_READ_CHECK 2 /* PU field (Word 4) = Data Transfer Length */
2700#define CLASS1 0 /* Class 1 */
2701#define CLASS2 1 /* Class 2 */
2702#define CLASS3 2 /* Class 3 */
2703#define CLASS_FCP_INTERMIX 7 /* FCP Data->Cls 1, all else->Cls 2 */
2704

--- 14 unchanged lines hidden (view full) ---

2719#define IOSTAT_RSVD4 0xE
2720#define IOSTAT_RSVD5 0xF
2721#define IOSTAT_DRIVER_REJECT 0x10 /* ulpStatus - Driver defined */
2722#define IOSTAT_DEFAULT 0xF /* Same as rsvd5 for now */
2723#define IOSTAT_CNT 0x11
2724
2725} IOCB_t;
2726
3024#define PARM_UNUSED 0 /* PU field (Word 4) not used */
3025#define PARM_REL_OFF 1 /* PU field (Word 4) = R. O. */
3026#define PARM_READ_CHECK 2 /* PU field (Word 4) = Data Transfer Length */
3027#define CLASS1 0 /* Class 1 */
3028#define CLASS2 1 /* Class 2 */
3029#define CLASS3 2 /* Class 3 */
3030#define CLASS_FCP_INTERMIX 7 /* FCP Data->Cls 1, all else->Cls 2 */
3031

--- 14 unchanged lines hidden (view full) ---

3046#define IOSTAT_RSVD4 0xE
3047#define IOSTAT_RSVD5 0xF
3048#define IOSTAT_DRIVER_REJECT 0x10 /* ulpStatus - Driver defined */
3049#define IOSTAT_DEFAULT 0xF /* Same as rsvd5 for now */
3050#define IOSTAT_CNT 0x11
3051
3052} IOCB_t;
3053
3054/* Structure used for a single HBQ entry */
3055struct lpfc_hbq_entry {
3056 struct ulp_bde64 bde;
3057 uint32_t buffer_tag;
3058};
2727
3059
3060
2728#define SLI1_SLIM_SIZE (4 * 1024)
2729
2730/* Up to 498 IOCBs will fit into 16k
2731 * 256 (MAILBOX_t) + 140 (PCB_t) + ( 32 (IOCB_t) * 498 ) = < 16384
2732 */
3061#define SLI1_SLIM_SIZE (4 * 1024)
3062
3063/* Up to 498 IOCBs will fit into 16k
3064 * 256 (MAILBOX_t) + 140 (PCB_t) + ( 32 (IOCB_t) * 498 ) = < 16384
3065 */
2733#define SLI2_SLIM_SIZE (16 * 1024)
3066#define SLI2_SLIM_SIZE (64 * 1024)
2734
2735/* Maximum IOCBs that will fit in SLI2 slim */
2736#define MAX_SLI2_IOCB 498
3067
3068/* Maximum IOCBs that will fit in SLI2 slim */
3069#define MAX_SLI2_IOCB 498
3070#define MAX_SLIM_IOCB_SIZE (SLI2_SLIM_SIZE - \
3071 (sizeof(MAILBOX_t) + sizeof(PCB_t)))
2737
3072
3073/* HBQ entries are 4 words each = 4k */
3074#define LPFC_TOTAL_HBQ_SIZE (sizeof(struct lpfc_hbq_entry) * \
3075 lpfc_sli_hbq_count())
3076
2738struct lpfc_sli2_slim {
2739 MAILBOX_t mbx;
2740 PCB_t pcb;
3077struct lpfc_sli2_slim {
3078 MAILBOX_t mbx;
3079 PCB_t pcb;
2741 IOCB_t IOCBs[MAX_SLI2_IOCB];
3080 IOCB_t IOCBs[MAX_SLIM_IOCB_SIZE];
2742};
2743
2744/*
2745 * This function checks PCI device to allow special handling for LC HBAs.
2746 *
2747 * Parameters:
2748 * device : struct pci_dev 's device field
2749 *

--- 18 unchanged lines hidden ---
3081};
3082
3083/*
3084 * This function checks PCI device to allow special handling for LC HBAs.
3085 *
3086 * Parameters:
3087 * device : struct pci_dev 's device field
3088 *

--- 18 unchanged lines hidden ---