0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #include <linux/compiler.h>
0019 #include <linux/if_fddi.h>
0020 #include <linux/spinlock.h>
0021 #include <linux/timer.h>
0022 #include <linux/types.h>
0023
0024
0025 #define FZA_REG_BASE 0x100000
0026 #define FZA_REG_RESET 0x100200
0027 #define FZA_REG_INT_EVENT 0x100400
0028 #define FZA_REG_STATUS 0x100402
0029 #define FZA_REG_INT_MASK 0x100404
0030 #define FZA_REG_CONTROL_A 0x100500
0031 #define FZA_REG_CONTROL_B 0x100502
0032
0033
0034 #define FZA_RESET_DLU 0x0002
0035 #define FZA_RESET_INIT 0x0001
0036 #define FZA_RESET_CLR 0x0000
0037
0038
0039 #define FZA_EVENT_DLU_DONE 0x0800
0040 #define FZA_EVENT_FLUSH_TX 0x0400
0041 #define FZA_EVENT_PM_PARITY_ERR 0x0200
0042 #define FZA_EVENT_HB_PARITY_ERR 0x0100
0043 #define FZA_EVENT_NXM_ERR 0x0080
0044
0045
0046
0047 #define FZA_EVENT_LINK_ST_CHG 0x0040
0048 #define FZA_EVENT_STATE_CHG 0x0020
0049 #define FZA_EVENT_UNS_POLL 0x0010
0050 #define FZA_EVENT_CMD_DONE 0x0008
0051 #define FZA_EVENT_SMT_TX_POLL 0x0004
0052 #define FZA_EVENT_RX_POLL 0x0002
0053 #define FZA_EVENT_TX_DONE 0x0001
0054
0055
0056 #define FZA_STATUS_DLU_SHIFT 0xc
0057 #define FZA_STATUS_DLU_MASK 0x03
0058 #define FZA_STATUS_LINK_SHIFT 0xb
0059 #define FZA_STATUS_LINK_MASK 0x01
0060 #define FZA_STATUS_STATE_SHIFT 0x8
0061 #define FZA_STATUS_STATE_MASK 0x07
0062 #define FZA_STATUS_HALT_SHIFT 0x0
0063 #define FZA_STATUS_HALT_MASK 0xff
0064 #define FZA_STATUS_TEST_SHIFT 0x0
0065 #define FZA_STATUS_TEST_MASK 0xff
0066
0067 #define FZA_STATUS_GET_DLU(x) (((x) >> FZA_STATUS_DLU_SHIFT) & \
0068 FZA_STATUS_DLU_MASK)
0069 #define FZA_STATUS_GET_LINK(x) (((x) >> FZA_STATUS_LINK_SHIFT) & \
0070 FZA_STATUS_LINK_MASK)
0071 #define FZA_STATUS_GET_STATE(x) (((x) >> FZA_STATUS_STATE_SHIFT) & \
0072 FZA_STATUS_STATE_MASK)
0073 #define FZA_STATUS_GET_HALT(x) (((x) >> FZA_STATUS_HALT_SHIFT) & \
0074 FZA_STATUS_HALT_MASK)
0075 #define FZA_STATUS_GET_TEST(x) (((x) >> FZA_STATUS_TEST_SHIFT) & \
0076 FZA_STATUS_TEST_MASK)
0077
0078 #define FZA_DLU_FAILURE 0x0
0079 #define FZA_DLU_ERROR 0x1
0080 #define FZA_DLU_SUCCESS 0x2
0081
0082 #define FZA_LINK_OFF 0x0
0083 #define FZA_LINK_ON 0x1
0084
0085 #define FZA_STATE_RESET 0x0
0086 #define FZA_STATE_UNINITIALIZED 0x1
0087 #define FZA_STATE_INITIALIZED 0x2
0088 #define FZA_STATE_RUNNING 0x3
0089 #define FZA_STATE_MAINTENANCE 0x4
0090 #define FZA_STATE_HALTED 0x5
0091
0092 #define FZA_HALT_UNKNOWN 0x00
0093 #define FZA_HALT_HOST 0x01
0094 #define FZA_HALT_HB_PARITY 0x02
0095 #define FZA_HALT_NXM 0x03
0096 #define FZA_HALT_SW 0x04
0097 #define FZA_HALT_HW 0x05
0098 #define FZA_HALT_PC_TRACE 0x06
0099 #define FZA_HALT_DLSW 0x07
0100 #define FZA_HALT_DLHW 0x08
0101
0102 #define FZA_TEST_FATAL 0x00
0103 #define FZA_TEST_68K 0x01
0104 #define FZA_TEST_SRAM_BWADDR 0x02
0105 #define FZA_TEST_SRAM_DBUS 0x03
0106 #define FZA_TEST_SRAM_STUCK1 0x04
0107 #define FZA_TEST_SRAM_STUCK2 0x05
0108 #define FZA_TEST_SRAM_COUPL1 0x06
0109 #define FZA_TEST_SRAM_COUPL2 0x07
0110 #define FZA_TEST_FLASH_CRC 0x08
0111 #define FZA_TEST_ROM 0x09
0112 #define FZA_TEST_PHY_CSR 0x0a
0113 #define FZA_TEST_MAC_BIST 0x0b
0114 #define FZA_TEST_MAC_CSR 0x0c
0115 #define FZA_TEST_MAC_ADDR_UNIQ 0x0d
0116 #define FZA_TEST_ELM_BIST 0x0e
0117 #define FZA_TEST_ELM_CSR 0x0f
0118 #define FZA_TEST_ELM_ADDR_UNIQ 0x10
0119 #define FZA_TEST_CAM 0x11
0120 #define FZA_TEST_NIROM 0x12
0121 #define FZA_TEST_SC_LOOP 0x13
0122 #define FZA_TEST_LM_LOOP 0x14
0123 #define FZA_TEST_EB_LOOP 0x15
0124 #define FZA_TEST_SC_LOOP_BYPS 0x16
0125 #define FZA_TEST_LM_LOOP_LOCAL 0x17
0126 #define FZA_TEST_EB_LOOP_LOCAL 0x18
0127 #define FZA_TEST_CDC_LOOP 0x19
0128 #define FZA_TEST_FIBER_LOOP 0x1A
0129 #define FZA_TEST_CAM_MATCH_LOOP 0x1B
0130 #define FZA_TEST_68K_IRQ_STUCK 0x1C
0131 #define FZA_TEST_IRQ_PRESENT 0x1D
0132 #define FZA_TEST_RMC_BIST 0x1E
0133 #define FZA_TEST_RMC_CSR 0x1F
0134 #define FZA_TEST_RMC_ADDR_UNIQ 0x20
0135 #define FZA_TEST_PM_DPATH 0x21
0136 #define FZA_TEST_PM_ADDR 0x22
0137 #define FZA_TEST_RES_23 0x23
0138 #define FZA_TEST_PM_DESC 0x24
0139 #define FZA_TEST_PM_OWN 0x25
0140 #define FZA_TEST_PM_PARITY 0x26
0141 #define FZA_TEST_PM_BSWAP 0x27
0142 #define FZA_TEST_PM_WSWAP 0x28
0143 #define FZA_TEST_PM_REF 0x29
0144 #define FZA_TEST_PM_CSR 0x2A
0145 #define FZA_TEST_PORT_STATUS 0x2B
0146 #define FZA_TEST_HOST_IRQMASK 0x2C
0147 #define FZA_TEST_TIMER_IRQ1 0x2D
0148 #define FZA_TEST_FORCE_IRQ1 0x2E
0149 #define FZA_TEST_TIMER_IRQ5 0x2F
0150 #define FZA_TEST_FORCE_IRQ5 0x30
0151 #define FZA_TEST_RES_31 0x31
0152 #define FZA_TEST_IC_PRIO 0x32
0153 #define FZA_TEST_PM_FULL 0x33
0154 #define FZA_TEST_PMI_DMA 0x34
0155
0156
0157 #define FZA_MASK_RESERVED 0xf000
0158 #define FZA_MASK_DLU_DONE 0x0800
0159 #define FZA_MASK_FLUSH_TX 0x0400
0160 #define FZA_MASK_PM_PARITY_ERR 0x0200
0161
0162 #define FZA_MASK_HB_PARITY_ERR 0x0100
0163 #define FZA_MASK_NXM_ERR 0x0080
0164
0165
0166 #define FZA_MASK_LINK_ST_CHG 0x0040
0167 #define FZA_MASK_STATE_CHG 0x0020
0168 #define FZA_MASK_UNS_POLL 0x0010
0169 #define FZA_MASK_CMD_DONE 0x0008
0170 #define FZA_MASK_SMT_TX_POLL 0x0004
0171 #define FZA_MASK_RCV_POLL 0x0002
0172
0173 #define FZA_MASK_TX_DONE 0x0001
0174
0175
0176 #define FZA_MASK_NONE 0x0000
0177 #define FZA_MASK_NORMAL \
0178 ((~(FZA_MASK_RESERVED | FZA_MASK_DLU_DONE | \
0179 FZA_MASK_PM_PARITY_ERR | FZA_MASK_HB_PARITY_ERR | \
0180 FZA_MASK_NXM_ERR)) & 0xffff)
0181
0182
0183 #define FZA_CONTROL_A_HB_PARITY_ERR 0x8000
0184 #define FZA_CONTROL_A_NXM_ERR 0x4000
0185
0186
0187 #define FZA_CONTROL_A_SMT_RX_OVFL 0x0040
0188 #define FZA_CONTROL_A_FLUSH_DONE 0x0020
0189 #define FZA_CONTROL_A_SHUT 0x0010
0190 #define FZA_CONTROL_A_HALT 0x0008
0191 #define FZA_CONTROL_A_CMD_POLL 0x0004
0192 #define FZA_CONTROL_A_SMT_RX_POLL 0x0002
0193 #define FZA_CONTROL_A_TX_POLL 0x0001
0194
0195
0196
0197
0198
0199
0200
0201 #define FZA_CONTROL_B_CONSOLE 0x0002
0202
0203
0204 #define FZA_CONTROL_B_DRIVER 0x0001
0205 #define FZA_CONTROL_B_IDLE 0x0000
0206
0207 #define FZA_RESET_PAD \
0208 (FZA_REG_RESET - FZA_REG_BASE)
0209 #define FZA_INT_EVENT_PAD \
0210 (FZA_REG_INT_EVENT - FZA_REG_RESET - sizeof(u16))
0211 #define FZA_CONTROL_A_PAD \
0212 (FZA_REG_CONTROL_A - FZA_REG_INT_MASK - sizeof(u16))
0213
0214
0215 struct fza_regs {
0216 u8 pad0[FZA_RESET_PAD];
0217 u16 reset;
0218 u8 pad1[FZA_INT_EVENT_PAD];
0219 u16 int_event;
0220 u16 status;
0221 u16 int_mask;
0222 u8 pad2[FZA_CONTROL_A_PAD];
0223 u16 control_a;
0224 u16 control_b;
0225 };
0226
0227
0228 struct fza_ring_cmd {
0229 u32 cmd_own;
0230 u32 stat;
0231 u32 buffer;
0232 u32 pad0;
0233 };
0234
0235 #define FZA_RING_CMD 0x200400
0236 #define FZA_RING_CMD_SIZE 0x40
0237
0238
0239
0240 #define FZA_RING_CMD_MASK 0x7fffffff
0241 #define FZA_RING_CMD_NOP 0x00000000
0242 #define FZA_RING_CMD_INIT 0x00000001
0243 #define FZA_RING_CMD_MODCAM 0x00000002
0244 #define FZA_RING_CMD_PARAM 0x00000003
0245 #define FZA_RING_CMD_MODPROM 0x00000004
0246 #define FZA_RING_CMD_SETCHAR 0x00000005
0247 #define FZA_RING_CMD_RDCNTR 0x00000006
0248 #define FZA_RING_CMD_STATUS 0x00000007
0249 #define FZA_RING_CMD_RDCAM 0x00000008
0250
0251
0252 #define FZA_RING_STAT_SUCCESS 0x00000000
0253
0254
0255 struct fza_ring_uns {
0256 u32 own;
0257 u32 id;
0258 u32 buffer;
0259 u32 pad0;
0260 };
0261
0262 #define FZA_RING_UNS 0x200800
0263 #define FZA_RING_UNS_SIZE 0x40
0264
0265
0266
0267 #define FZA_RING_UNS_UND 0x00000000
0268 #define FZA_RING_UNS_INIT_IN 0x00000001
0269 #define FZA_RING_UNS_INIT_RX 0x00000002
0270 #define FZA_RING_UNS_BEAC_IN 0x00000003
0271 #define FZA_RING_UNS_DUP_ADDR 0x00000004
0272 #define FZA_RING_UNS_DUP_TOK 0x00000005
0273 #define FZA_RING_UNS_PURG_ERR 0x00000006
0274 #define FZA_RING_UNS_STRIP_ERR 0x00000007
0275 #define FZA_RING_UNS_OP_OSC 0x00000008
0276 #define FZA_RING_UNS_BEAC_RX 0x00000009
0277 #define FZA_RING_UNS_PCT_IN 0x0000000a
0278 #define FZA_RING_UNS_PCT_RX 0x0000000b
0279 #define FZA_RING_UNS_TX_UNDER 0x0000000c
0280 #define FZA_RING_UNS_TX_FAIL 0x0000000d
0281 #define FZA_RING_UNS_RX_OVER 0x0000000e
0282
0283
0284 struct fza_ring_rmc_tx {
0285 u32 rmc;
0286 u32 avl;
0287 u32 own;
0288 u32 pad0;
0289 };
0290
0291 #define FZA_TX_BUFFER_ADDR(x) (0x200000 | (((x) & 0xffff) << 5))
0292 #define FZA_TX_BUFFER_SIZE 512
0293 struct fza_buffer_tx {
0294 u32 data[FZA_TX_BUFFER_SIZE / sizeof(u32)];
0295 };
0296
0297
0298 #define FZA_RING_TX_SOP 0x80000000
0299 #define FZA_RING_TX_EOP 0x40000000
0300 #define FZA_RING_TX_DTP 0x20000000
0301 #define FZA_RING_TX_VBC 0x10000000
0302 #define FZA_RING_TX_DCC_MASK 0x0f000000
0303 #define FZA_RING_TX_DCC_SUCCESS 0x01000000
0304 #define FZA_RING_TX_DCC_DTP_SOP 0x02000000
0305 #define FZA_RING_TX_DCC_DTP 0x04000000
0306 #define FZA_RING_TX_DCC_ABORT 0x05000000
0307 #define FZA_RING_TX_DCC_PARITY 0x06000000
0308 #define FZA_RING_TX_DCC_UNDRRUN 0x07000000
0309 #define FZA_RING_TX_XPO_MASK 0x003fe000
0310
0311
0312 struct fza_ring_hst_rx {
0313 u32 buf0_own;
0314
0315
0316
0317 u32 buffer1;
0318
0319
0320
0321 u32 rmc;
0322 u32 pad0;
0323 };
0324
0325 #define FZA_RX_BUFFER_SIZE (4096 + 512)
0326
0327
0328 #define FZA_RING_RX_SOP 0x80000000
0329 #define FZA_RING_RX_EOP 0x40000000
0330 #define FZA_RING_RX_FSC_MASK 0x38000000
0331 #define FZA_RING_RX_FSB_MASK 0x07c00000
0332 #define FZA_RING_RX_FSB_ERR 0x04000000
0333 #define FZA_RING_RX_FSB_ADDR 0x02000000
0334 #define FZA_RING_RX_FSB_COP 0x01000000
0335 #define FZA_RING_RX_FSB_F0 0x00800000
0336 #define FZA_RING_RX_FSB_F1 0x00400000
0337 #define FZA_RING_RX_BAD 0x00200000
0338 #define FZA_RING_RX_CRC 0x00100000
0339 #define FZA_RING_RX_RRR_MASK 0x000e0000
0340 #define FZA_RING_RX_RRR_OK 0x00000000
0341 #define FZA_RING_RX_RRR_SADDR 0x00020000
0342 #define FZA_RING_RX_RRR_DADDR 0x00040000
0343 #define FZA_RING_RX_RRR_ABORT 0x00060000
0344 #define FZA_RING_RX_RRR_LENGTH 0x00080000
0345 #define FZA_RING_RX_RRR_FRAG 0x000a0000
0346 #define FZA_RING_RX_RRR_FORMAT 0x000c0000
0347 #define FZA_RING_RX_RRR_RESET 0x000e0000
0348 #define FZA_RING_RX_DA_MASK 0x00018000
0349 #define FZA_RING_RX_DA_NONE 0x00000000
0350 #define FZA_RING_RX_DA_PROM 0x00008000
0351 #define FZA_RING_RX_DA_CAM 0x00010000
0352 #define FZA_RING_RX_DA_LOCAL 0x00018000
0353 #define FZA_RING_RX_SA_MASK 0x00006000
0354 #define FZA_RING_RX_SA_NONE 0x00000000
0355 #define FZA_RING_RX_SA_ALIAS 0x00002000
0356 #define FZA_RING_RX_SA_CAM 0x00004000
0357 #define FZA_RING_RX_SA_LOCAL 0x00006000
0358
0359
0360 struct fza_ring_smt {
0361 u32 own;
0362 u32 rmc;
0363 u32 buffer;
0364 u32 pad0;
0365 };
0366
0367
0368
0369
0370
0371
0372 #define FZA_RING_OWN_MASK 0x80000000
0373 #define FZA_RING_OWN_FZA 0x00000000
0374 #define FZA_RING_OWN_HOST 0x80000000
0375 #define FZA_RING_TX_OWN_RMC 0x80000000
0376 #define FZA_RING_TX_OWN_HOST 0x00000000
0377
0378
0379 #define FZA_RING_PBC_MASK 0x00001fff
0380
0381
0382
0383 struct fza_counter {
0384 u32 msw;
0385 u32 lsw;
0386 };
0387
0388 struct fza_counters {
0389 struct fza_counter sys_buf;
0390 struct fza_counter tx_under;
0391 struct fza_counter tx_fail;
0392 struct fza_counter rx_over;
0393 struct fza_counter frame_cnt;
0394 struct fza_counter error_cnt;
0395 struct fza_counter lost_cnt;
0396 struct fza_counter rinit_in;
0397 struct fza_counter rinit_rx;
0398 struct fza_counter beac_in;
0399 struct fza_counter dup_addr;
0400 struct fza_counter dup_tok;
0401 struct fza_counter purg_err;
0402 struct fza_counter strip_err;
0403 struct fza_counter pct_in;
0404 struct fza_counter pct_rx;
0405 struct fza_counter lem_rej;
0406 struct fza_counter tne_rej;
0407 struct fza_counter lem_event;
0408 struct fza_counter lct_rej;
0409 struct fza_counter conn_cmpl;
0410 struct fza_counter el_buf;
0411 };
0412
0413
0414
0415
0416
0417
0418
0419
0420 struct fza_cmd_init {
0421 u32 tx_mode;
0422 u32 hst_rx_size;
0423
0424 struct fza_counters counters;
0425
0426 u8 rmc_rev[4];
0427 u8 rom_rev[4];
0428 u8 fw_rev[4];
0429
0430 u32 mop_type;
0431
0432 u32 hst_rx;
0433 u32 rmc_tx;
0434 u32 rmc_tx_size;
0435 u32 smt_tx;
0436 u32 smt_tx_size;
0437 u32 smt_rx;
0438 u32 smt_rx_size;
0439
0440 u32 hw_addr[2];
0441
0442 u32 def_t_req;
0443
0444
0445 u32 def_tvx;
0446
0447
0448 u32 def_t_max;
0449
0450
0451 u32 lem_threshold;
0452 u32 def_station_id[2];
0453
0454 u32 pmd_type_alt;
0455
0456 u32 smt_ver;
0457
0458 u32 rtoken_timeout;
0459
0460
0461 u32 ring_purger;
0462
0463
0464
0465 u32 smt_ver_max;
0466 u32 smt_ver_min;
0467 u32 pmd_type;
0468 };
0469
0470
0471 #define FZA_PMD_TYPE_MMF 0
0472 #define FZA_PMD_TYPE_TW 101
0473 #define FZA_PMD_TYPE_STP 102
0474
0475
0476 #define FZA_CMD_CAM_SIZE 64
0477 struct fza_cmd_cam {
0478 u32 hw_addr[FZA_CMD_CAM_SIZE][2];
0479 };
0480
0481
0482
0483
0484
0485
0486
0487 struct fza_cmd_param {
0488 u32 loop_mode;
0489 u32 t_max;
0490
0491
0492
0493 u32 t_req;
0494
0495
0496
0497 u32 tvx;
0498
0499
0500
0501 u32 lem_threshold;
0502 u32 station_id[2];
0503 u32 rtoken_timeout;
0504
0505
0506
0507 u32 ring_purger;
0508 };
0509
0510
0511 #define FZA_LOOP_NORMAL 0
0512 #define FZA_LOOP_INTERN 1
0513 #define FZA_LOOP_EXTERN 2
0514
0515
0516 struct fza_cmd_modprom {
0517 u32 llc_prom;
0518 u32 smt_prom;
0519 u32 llc_multi;
0520 u32 llc_bcast;
0521 };
0522
0523
0524
0525
0526
0527 struct fza_cmd_setchar {
0528 u32 t_max;
0529 u32 t_req;
0530 u32 tvx;
0531 u32 lem_threshold;
0532 u32 rtoken_timeout;
0533 u32 ring_purger;
0534 };
0535
0536
0537 struct fza_cmd_rdcntr {
0538 struct fza_counters counters;
0539 };
0540
0541
0542 struct fza_cmd_status {
0543 u32 led_state;
0544 u32 rmt_state;
0545 u32 link_state;
0546 u32 dup_addr;
0547 u32 ring_purger;
0548 u32 t_neg;
0549 u32 una[2];
0550 u32 una_timeout;
0551 u32 strip_mode;
0552 u32 yield_mode;
0553 u32 phy_state;
0554 u32 neigh_phy;
0555 u32 reject;
0556 u32 phy_lee;
0557 u32 una_old[2];
0558 u32 rmt_mac;
0559 u32 ring_err;
0560 u32 beac_rx[2];
0561 u32 un_dup_addr;
0562 u32 dna[2];
0563 u32 dna_old[2];
0564 };
0565
0566
0567 union fza_cmd_buf {
0568 struct fza_cmd_init init;
0569 struct fza_cmd_cam cam;
0570 struct fza_cmd_param param;
0571 struct fza_cmd_modprom modprom;
0572 struct fza_cmd_setchar setchar;
0573 struct fza_cmd_rdcntr rdcntr;
0574 struct fza_cmd_status status;
0575 };
0576
0577
0578
0579
0580 #define FZA_PRH0_FMT_TYPE_MASK 0xc0
0581 #define FZA_PRH0_TOK_TYPE_MASK 0x30
0582
0583
0584 #define FZA_PRH0_TKN_TYPE_ANY 0x30
0585 #define FZA_PRH0_TKN_TYPE_UNR 0x20
0586 #define FZA_PRH0_TKN_TYPE_RST 0x10
0587 #define FZA_PRH0_TKN_TYPE_IMM 0x00
0588
0589 #define FZA_PRH0_FRAME_MASK 0x08
0590 #define FZA_PRH0_FRAME_SYNC 0x08
0591 #define FZA_PRH0_FRAME_ASYNC 0x00
0592 #define FZA_PRH0_MODE_MASK 0x04
0593 #define FZA_PRH0_MODE_IMMED 0x04
0594
0595
0596 #define FZA_PRH0_MODE_NORMAL 0x00
0597
0598
0599 #define FZA_PRH0_SF_MASK 0x02
0600 #define FZA_PRH0_SF_FIRST 0x02
0601
0602
0603 #define FZA_PRH0_SF_NORMAL 0x00
0604 #define FZA_PRH0_BCN_MASK 0x01
0605 #define FZA_PRH0_BCN_BEACON 0x01
0606
0607
0608 #define FZA_PRH0_BCN_DATA 0x01
0609
0610
0611
0612
0613 #define FZA_PRH1_SL_MASK 0x40
0614 #define FZA_PRH1_SL_LAST 0x40
0615
0616
0617 #define FZA_PRH1_SL_NORMAL 0x00
0618 #define FZA_PRH1_CRC_MASK 0x20
0619 #define FZA_PRH1_CRC_NORMAL 0x20
0620
0621
0622 #define FZA_PRH1_CRC_SKIP 0x00
0623 #define FZA_PRH1_TKN_SEND_MASK 0x18
0624
0625
0626 #define FZA_PRH1_TKN_SEND_ORIG 0x18
0627
0628
0629 #define FZA_PRH1_TKN_SEND_RST 0x10
0630 #define FZA_PRH1_TKN_SEND_UNR 0x08
0631 #define FZA_PRH1_TKN_SEND_NONE 0x00
0632 #define FZA_PRH1_EXTRA_FS_MASK 0x07
0633
0634 #define FZA_PRH1_EXTRA_FS_ST 0x07
0635 #define FZA_PRH1_EXTRA_FS_SS 0x06
0636 #define FZA_PRH1_EXTRA_FS_SR 0x05
0637 #define FZA_PRH1_EXTRA_FS_NONE1 0x04
0638 #define FZA_PRH1_EXTRA_FS_RT 0x03
0639 #define FZA_PRH1_EXTRA_FS_RS 0x02
0640 #define FZA_PRH1_EXTRA_FS_RR 0x01
0641 #define FZA_PRH1_EXTRA_FS_NONE 0x00
0642
0643 #define FZA_PRH2_NORMAL 0x00
0644
0645
0646 #define FZA_PRH0_LLC (FZA_PRH0_TKN_TYPE_UNR)
0647 #define FZA_PRH1_LLC (FZA_PRH1_CRC_NORMAL | FZA_PRH1_TKN_SEND_UNR)
0648 #define FZA_PRH2_LLC (FZA_PRH2_NORMAL)
0649
0650
0651 #define FZA_PRH0_SMT (FZA_PRH0_TKN_TYPE_UNR)
0652 #define FZA_PRH1_SMT (FZA_PRH1_CRC_NORMAL | FZA_PRH1_TKN_SEND_UNR)
0653 #define FZA_PRH2_SMT (FZA_PRH2_NORMAL)
0654
0655 #if ((FZA_RING_RX_SIZE) < 2) || ((FZA_RING_RX_SIZE) > 256)
0656 # error FZA_RING_RX_SIZE has to be from 2 up to 256
0657 #endif
0658 #if ((FZA_RING_TX_MODE) != 0) && ((FZA_RING_TX_MODE) != 1)
0659 # error FZA_RING_TX_MODE has to be either 0 or 1
0660 #endif
0661
0662 #define FZA_RING_TX_SIZE (512 << (FZA_RING_TX_MODE))
0663
0664 struct fza_private {
0665 struct device *bdev;
0666 const char *name;
0667 void __iomem *mmio;
0668 struct fza_regs __iomem *regs;
0669
0670 struct sk_buff *rx_skbuff[FZA_RING_RX_SIZE];
0671
0672
0673
0674 dma_addr_t rx_dma[FZA_RING_RX_SIZE];
0675
0676
0677 struct fza_ring_cmd __iomem *ring_cmd;
0678
0679
0680
0681 int ring_cmd_index;
0682
0683
0684 struct fza_ring_uns __iomem *ring_uns;
0685
0686
0687
0688 int ring_uns_index;
0689
0690
0691
0692 struct fza_ring_rmc_tx __iomem *ring_rmc_tx;
0693
0694
0695
0696
0697 int ring_rmc_tx_size;
0698
0699
0700
0701 int ring_rmc_tx_index;
0702
0703
0704 int ring_rmc_txd_index;
0705
0706
0707
0708
0709 struct fza_ring_hst_rx __iomem *ring_hst_rx;
0710
0711
0712
0713
0714 int ring_hst_rx_size;
0715
0716
0717
0718 int ring_hst_rx_index;
0719
0720
0721
0722 struct fza_ring_smt __iomem *ring_smt_tx;
0723
0724
0725
0726
0727 int ring_smt_tx_size;
0728
0729
0730
0731 int ring_smt_tx_index;
0732
0733
0734
0735 struct fza_ring_smt __iomem *ring_smt_rx;
0736
0737
0738
0739
0740 int ring_smt_rx_size;
0741
0742
0743
0744 int ring_smt_rx_index;
0745
0746
0747
0748 struct fza_buffer_tx __iomem *buffer_tx;
0749
0750
0751
0752 uint state;
0753
0754 spinlock_t lock;
0755 uint int_mask;
0756
0757 int cmd_done_flag;
0758 wait_queue_head_t cmd_done_wait;
0759
0760 int state_chg_flag;
0761 wait_queue_head_t state_chg_wait;
0762
0763 struct timer_list reset_timer;
0764 int timer_state;
0765
0766 int queue_active;
0767
0768 struct net_device_stats stats;
0769
0770 uint irq_count_flush_tx;
0771 uint irq_count_uns_poll;
0772 uint irq_count_smt_tx_poll;
0773 uint irq_count_rx_poll;
0774 uint irq_count_tx_done;
0775 uint irq_count_cmd_done;
0776 uint irq_count_state_chg;
0777 uint irq_count_link_st_chg;
0778
0779 uint t_max;
0780 uint t_req;
0781 uint tvx;
0782 uint lem_threshold;
0783 uint station_id[2];
0784 uint rtoken_timeout;
0785 uint ring_purger;
0786 };
0787
0788 struct fza_fddihdr {
0789 u8 pa[2];
0790 u8 sd;
0791 struct fddihdr hdr;
0792 } __packed;