diff options
Diffstat (limited to 'drivers/net/wireless/zd1211rw/zd_chip.h')
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_chip.h | 158 |
1 files changed, 90 insertions, 68 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h index a4e3cee9b59d..b07569e391ee 100644 --- a/drivers/net/wireless/zd1211rw/zd_chip.h +++ b/drivers/net/wireless/zd1211rw/zd_chip.h | |||
@@ -18,7 +18,6 @@ | |||
18 | #ifndef _ZD_CHIP_H | 18 | #ifndef _ZD_CHIP_H |
19 | #define _ZD_CHIP_H | 19 | #define _ZD_CHIP_H |
20 | 20 | ||
21 | #include "zd_types.h" | ||
22 | #include "zd_rf.h" | 21 | #include "zd_rf.h" |
23 | #include "zd_usb.h" | 22 | #include "zd_usb.h" |
24 | 23 | ||
@@ -27,6 +26,37 @@ | |||
27 | * adds a processor for handling the USB protocol. | 26 | * adds a processor for handling the USB protocol. |
28 | */ | 27 | */ |
29 | 28 | ||
29 | /* Address space */ | ||
30 | enum { | ||
31 | /* CONTROL REGISTERS */ | ||
32 | CR_START = 0x9000, | ||
33 | |||
34 | |||
35 | /* FIRMWARE */ | ||
36 | FW_START = 0xee00, | ||
37 | |||
38 | |||
39 | /* EEPROM */ | ||
40 | E2P_START = 0xf800, | ||
41 | E2P_LEN = 0x800, | ||
42 | |||
43 | /* EEPROM layout */ | ||
44 | E2P_LOAD_CODE_LEN = 0xe, /* base 0xf800 */ | ||
45 | E2P_LOAD_VECT_LEN = 0x9, /* base 0xf80e */ | ||
46 | /* E2P_DATA indexes into this */ | ||
47 | E2P_DATA_LEN = 0x7e, /* base 0xf817 */ | ||
48 | E2P_BOOT_CODE_LEN = 0x760, /* base 0xf895 */ | ||
49 | E2P_INTR_VECT_LEN = 0xb, /* base 0xfff5 */ | ||
50 | |||
51 | /* Some precomputed offsets into the EEPROM */ | ||
52 | E2P_DATA_OFFSET = E2P_LOAD_CODE_LEN + E2P_LOAD_VECT_LEN, | ||
53 | E2P_BOOT_CODE_OFFSET = E2P_DATA_OFFSET + E2P_DATA_LEN, | ||
54 | }; | ||
55 | |||
56 | #define CTL_REG(offset) ((zd_addr_t)(CR_START + (offset))) | ||
57 | #define E2P_DATA(offset) ((zd_addr_t)(E2P_START + E2P_DATA_OFFSET + (offset))) | ||
58 | #define FWRAW_DATA(offset) ((zd_addr_t)(FW_START + (offset))) | ||
59 | |||
30 | /* 8-bit hardware registers */ | 60 | /* 8-bit hardware registers */ |
31 | #define CR0 CTL_REG(0x0000) | 61 | #define CR0 CTL_REG(0x0000) |
32 | #define CR1 CTL_REG(0x0004) | 62 | #define CR1 CTL_REG(0x0004) |
@@ -302,7 +332,7 @@ | |||
302 | 332 | ||
303 | #define CR_MAX_PHY_REG 255 | 333 | #define CR_MAX_PHY_REG 255 |
304 | 334 | ||
305 | /* Taken from the ZYDAS driver, not all of them are relevant for the ZSD1211 | 335 | /* Taken from the ZYDAS driver, not all of them are relevant for the ZD1211 |
306 | * driver. | 336 | * driver. |
307 | */ | 337 | */ |
308 | 338 | ||
@@ -594,81 +624,71 @@ | |||
594 | /* | 624 | /* |
595 | * Upper 16 bit contains the regulatory domain. | 625 | * Upper 16 bit contains the regulatory domain. |
596 | */ | 626 | */ |
597 | #define E2P_SUBID E2P_REG(0x00) | 627 | #define E2P_SUBID E2P_DATA(0x00) |
598 | #define E2P_POD E2P_REG(0x02) | 628 | #define E2P_POD E2P_DATA(0x02) |
599 | #define E2P_MAC_ADDR_P1 E2P_REG(0x04) | 629 | #define E2P_MAC_ADDR_P1 E2P_DATA(0x04) |
600 | #define E2P_MAC_ADDR_P2 E2P_REG(0x06) | 630 | #define E2P_MAC_ADDR_P2 E2P_DATA(0x06) |
601 | #define E2P_PWR_CAL_VALUE1 E2P_REG(0x08) | 631 | #define E2P_PWR_CAL_VALUE1 E2P_DATA(0x08) |
602 | #define E2P_PWR_CAL_VALUE2 E2P_REG(0x0a) | 632 | #define E2P_PWR_CAL_VALUE2 E2P_DATA(0x0a) |
603 | #define E2P_PWR_CAL_VALUE3 E2P_REG(0x0c) | 633 | #define E2P_PWR_CAL_VALUE3 E2P_DATA(0x0c) |
604 | #define E2P_PWR_CAL_VALUE4 E2P_REG(0x0e) | 634 | #define E2P_PWR_CAL_VALUE4 E2P_DATA(0x0e) |
605 | #define E2P_PWR_INT_VALUE1 E2P_REG(0x10) | 635 | #define E2P_PWR_INT_VALUE1 E2P_DATA(0x10) |
606 | #define E2P_PWR_INT_VALUE2 E2P_REG(0x12) | 636 | #define E2P_PWR_INT_VALUE2 E2P_DATA(0x12) |
607 | #define E2P_PWR_INT_VALUE3 E2P_REG(0x14) | 637 | #define E2P_PWR_INT_VALUE3 E2P_DATA(0x14) |
608 | #define E2P_PWR_INT_VALUE4 E2P_REG(0x16) | 638 | #define E2P_PWR_INT_VALUE4 E2P_DATA(0x16) |
609 | 639 | ||
610 | /* Contains a bit for each allowed channel. It gives for Europe (ETSI 0x30) | 640 | /* Contains a bit for each allowed channel. It gives for Europe (ETSI 0x30) |
611 | * also only 11 channels. */ | 641 | * also only 11 channels. */ |
612 | #define E2P_ALLOWED_CHANNEL E2P_REG(0x18) | 642 | #define E2P_ALLOWED_CHANNEL E2P_DATA(0x18) |
613 | 643 | ||
614 | #define E2P_PHY_REG E2P_REG(0x1a) | 644 | #define E2P_PHY_REG E2P_DATA(0x1a) |
615 | #define E2P_DEVICE_VER E2P_REG(0x20) | 645 | #define E2P_DEVICE_VER E2P_DATA(0x20) |
616 | #define E2P_36M_CAL_VALUE1 E2P_REG(0x28) | 646 | #define E2P_36M_CAL_VALUE1 E2P_DATA(0x28) |
617 | #define E2P_36M_CAL_VALUE2 E2P_REG(0x2a) | 647 | #define E2P_36M_CAL_VALUE2 E2P_DATA(0x2a) |
618 | #define E2P_36M_CAL_VALUE3 E2P_REG(0x2c) | 648 | #define E2P_36M_CAL_VALUE3 E2P_DATA(0x2c) |
619 | #define E2P_36M_CAL_VALUE4 E2P_REG(0x2e) | 649 | #define E2P_36M_CAL_VALUE4 E2P_DATA(0x2e) |
620 | #define E2P_11A_INT_VALUE1 E2P_REG(0x30) | 650 | #define E2P_11A_INT_VALUE1 E2P_DATA(0x30) |
621 | #define E2P_11A_INT_VALUE2 E2P_REG(0x32) | 651 | #define E2P_11A_INT_VALUE2 E2P_DATA(0x32) |
622 | #define E2P_11A_INT_VALUE3 E2P_REG(0x34) | 652 | #define E2P_11A_INT_VALUE3 E2P_DATA(0x34) |
623 | #define E2P_11A_INT_VALUE4 E2P_REG(0x36) | 653 | #define E2P_11A_INT_VALUE4 E2P_DATA(0x36) |
624 | #define E2P_48M_CAL_VALUE1 E2P_REG(0x38) | 654 | #define E2P_48M_CAL_VALUE1 E2P_DATA(0x38) |
625 | #define E2P_48M_CAL_VALUE2 E2P_REG(0x3a) | 655 | #define E2P_48M_CAL_VALUE2 E2P_DATA(0x3a) |
626 | #define E2P_48M_CAL_VALUE3 E2P_REG(0x3c) | 656 | #define E2P_48M_CAL_VALUE3 E2P_DATA(0x3c) |
627 | #define E2P_48M_CAL_VALUE4 E2P_REG(0x3e) | 657 | #define E2P_48M_CAL_VALUE4 E2P_DATA(0x3e) |
628 | #define E2P_48M_INT_VALUE1 E2P_REG(0x40) | 658 | #define E2P_48M_INT_VALUE1 E2P_DATA(0x40) |
629 | #define E2P_48M_INT_VALUE2 E2P_REG(0x42) | 659 | #define E2P_48M_INT_VALUE2 E2P_DATA(0x42) |
630 | #define E2P_48M_INT_VALUE3 E2P_REG(0x44) | 660 | #define E2P_48M_INT_VALUE3 E2P_DATA(0x44) |
631 | #define E2P_48M_INT_VALUE4 E2P_REG(0x46) | 661 | #define E2P_48M_INT_VALUE4 E2P_DATA(0x46) |
632 | #define E2P_54M_CAL_VALUE1 E2P_REG(0x48) /* ??? */ | 662 | #define E2P_54M_CAL_VALUE1 E2P_DATA(0x48) /* ??? */ |
633 | #define E2P_54M_CAL_VALUE2 E2P_REG(0x4a) | 663 | #define E2P_54M_CAL_VALUE2 E2P_DATA(0x4a) |
634 | #define E2P_54M_CAL_VALUE3 E2P_REG(0x4c) | 664 | #define E2P_54M_CAL_VALUE3 E2P_DATA(0x4c) |
635 | #define E2P_54M_CAL_VALUE4 E2P_REG(0x4e) | 665 | #define E2P_54M_CAL_VALUE4 E2P_DATA(0x4e) |
636 | #define E2P_54M_INT_VALUE1 E2P_REG(0x50) | 666 | #define E2P_54M_INT_VALUE1 E2P_DATA(0x50) |
637 | #define E2P_54M_INT_VALUE2 E2P_REG(0x52) | 667 | #define E2P_54M_INT_VALUE2 E2P_DATA(0x52) |
638 | #define E2P_54M_INT_VALUE3 E2P_REG(0x54) | 668 | #define E2P_54M_INT_VALUE3 E2P_DATA(0x54) |
639 | #define E2P_54M_INT_VALUE4 E2P_REG(0x56) | 669 | #define E2P_54M_INT_VALUE4 E2P_DATA(0x56) |
640 | 670 | ||
641 | /* All 16 bit values */ | 671 | /* This word contains the base address of the FW_REG_ registers below */ |
642 | #define FW_FIRMWARE_VER FW_REG(0) | 672 | #define FWRAW_REGS_ADDR FWRAW_DATA(0x1d) |
643 | /* non-zero if USB high speed connection */ | 673 | |
644 | #define FW_USB_SPEED FW_REG(1) | 674 | /* All 16 bit values, offset from the address in FWRAW_REGS_ADDR */ |
645 | #define FW_FIX_TX_RATE FW_REG(2) | 675 | enum { |
646 | /* Seems to be able to control LEDs over the firmware */ | 676 | FW_REG_FIRMWARE_VER = 0, |
647 | #define FW_LINK_STATUS FW_REG(3) | 677 | /* non-zero if USB high speed connection */ |
648 | #define FW_SOFT_RESET FW_REG(4) | 678 | FW_REG_USB_SPEED = 1, |
649 | #define FW_FLASH_CHK FW_REG(5) | 679 | FW_REG_FIX_TX_RATE = 2, |
680 | /* Seems to be able to control LEDs over the firmware */ | ||
681 | FW_REG_LED_LINK_STATUS = 3, | ||
682 | FW_REG_SOFT_RESET = 4, | ||
683 | FW_REG_FLASH_CHK = 5, | ||
684 | }; | ||
650 | 685 | ||
686 | /* Values for FW_LINK_STATUS */ | ||
651 | #define FW_LINK_OFF 0x0 | 687 | #define FW_LINK_OFF 0x0 |
652 | #define FW_LINK_TX 0x1 | 688 | #define FW_LINK_TX 0x1 |
653 | /* 0x2 - link led on? */ | 689 | /* 0x2 - link led on? */ |
654 | 690 | ||
655 | enum { | 691 | enum { |
656 | CR_BASE_OFFSET = 0x9000, | ||
657 | FW_START_OFFSET = 0xee00, | ||
658 | FW_BASE_ADDR_OFFSET = FW_START_OFFSET + 0x1d, | ||
659 | EEPROM_START_OFFSET = 0xf800, | ||
660 | EEPROM_SIZE = 0x800, /* words */ | ||
661 | LOAD_CODE_SIZE = 0xe, /* words */ | ||
662 | LOAD_VECT_SIZE = 0x10000 - 0xfff7, /* words */ | ||
663 | EEPROM_REGS_OFFSET = LOAD_CODE_SIZE + LOAD_VECT_SIZE, | ||
664 | EEPROM_REGS_SIZE = 0x7e, /* words */ | ||
665 | E2P_BASE_OFFSET = EEPROM_START_OFFSET + | ||
666 | EEPROM_REGS_OFFSET, | ||
667 | }; | ||
668 | |||
669 | #define FW_REG_TABLE_ADDR USB_ADDR(FW_START_OFFSET + 0x1d) | ||
670 | |||
671 | enum { | ||
672 | /* indices for ofdm_cal_values */ | 692 | /* indices for ofdm_cal_values */ |
673 | OFDM_36M_INDEX = 0, | 693 | OFDM_36M_INDEX = 0, |
674 | OFDM_48M_INDEX = 1, | 694 | OFDM_48M_INDEX = 1, |
@@ -679,6 +699,8 @@ struct zd_chip { | |||
679 | struct zd_usb usb; | 699 | struct zd_usb usb; |
680 | struct zd_rf rf; | 700 | struct zd_rf rf; |
681 | struct mutex mutex; | 701 | struct mutex mutex; |
702 | /* Base address of FW_REG_ registers */ | ||
703 | zd_addr_t fw_regs_base; | ||
682 | u8 e2p_mac[ETH_ALEN]; | 704 | u8 e2p_mac[ETH_ALEN]; |
683 | /* EepSetPoint in the vendor driver */ | 705 | /* EepSetPoint in the vendor driver */ |
684 | u8 pwr_cal_values[E2P_CHANNEL_COUNT]; | 706 | u8 pwr_cal_values[E2P_CHANNEL_COUNT]; |