PCMCIA
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:13k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. Kernel Low-Level PCMCIA Interface Documentation
  2. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  3. John G Dorsey <john+@cs.cmu.edu>
  4. Updated: 30 June, 2000
  5. Note: this interface has not been finalized!
  6. See also: http://www.cs.cmu.edu/~wearable/software/pcmcia-arm.html
  7. Introduction
  8. Early versions of PCMCIA Card Services for StrongARM were designed to
  9. permit a single socket driver to run on a variety of SA-1100 boards by
  10. using a userland configuration process. During the conversion to the 2.3
  11. kernel series, all of the configuration has moved into sub-drivers in the
  12. kernel proper (see linux/drivers/pcmcia/sa1100*). This document describes
  13. the low-level interface between those sub-drivers and the sa1100 socket
  14. driver module.
  15. Presently, there are six operations which must be provided by the
  16. board-specific code. Only functions whose implementation is likely to
  17. differ across board designs are required at this level. Some examples
  18. include:
  19.   - configuring card detect lines to generate interrupts
  20.   - sensing the legal voltage levels for inserted cards
  21.   - asserting the reset signal for a card
  22. Functions which are assumed to be the same across all designs are
  23. performed within the generic socket driver itself. Some examples of these
  24. kinds of operations include:
  25.   - configuring memory access times based on the core clock frequency
  26.   - reads/writes on memory, byte swizzling, ...
  27. The current implementation allows the specific per-board set of low-level
  28. operations to be determined at run time. For each specific board, the
  29. following structure should be filled in:
  30.   struct pcmcia_low_level {
  31.     int (*init)(struct pcmcia_init *);
  32.     int (*shutdown)(void);
  33.     int (*socket_state)(struct pcmcia_state_array *);
  34.     int (*get_irq_info)(struct pcmcia_irq_info *);
  35.     int (*configure_socket)(const struct pcmcia_configure *);
  36.   };
  37. The component functions are described in detail below. Using the
  38. machine_is_*() tests, the pointer `pcmcia_low_level' should be assigned to
  39. the location of the table for your board.
  40. 0. init(struct pcmcia_init *init)
  41. This operation has three responsibilities:
  42.   - perform any board-specific initialization tasks
  43.   - associate the given handler with any interrupt-generating signals
  44.     such as card detection, or battery voltage detection
  45.   - set up any necessary edge detection for card ready signals
  46. Argument passing for this operation is implemented by the following
  47. structure:
  48.   struct pcmcia_init {
  49.     void (*handler)(int irq, void *dev, struct pt_regs *regs);
  50.     struct pcmcia_maps *maps;
  51.   };
  52. Here, `handler' is provided by the socket driver, and `maps' must be
  53. modified if the default mapping isn't appropriate. This operation should
  54. return one of two values:
  55.   - the highest-numbered socket available, plus one
  56.   - a negative number, indicating an error in configuration
  57. Note that the former case is _not_ the same as "the number of sockets
  58. available." In particular, if your design uses SA-1100 slot "one" but
  59. not slot "zero," you MUST report "2" to the socket driver.
  60. 1. shutdown(void)
  61. This operation takes no arguments, and will be called during cleanup for
  62. the socket driver module. Any state associated with the socket controller,
  63. including allocated data structures, reserved IRQs, etc. should be
  64. released in this routine.
  65. The return value for this operation is not examined.
  66. 2. socket_state(struct pcmcia_state_array *state_array)
  67. This operation will be invoked from the interrupt handler which was set up
  68. in the earlier call to init(). Note, however, that it should not include
  69. any side effects which would be inappropriate if the operation were to
  70. occur when no interrupt is pending. (An extra invocation of this operation
  71. currently takes place to initialize state in the socket driver.)
  72. Argument passing for this operation is handled by a structure which
  73. contains an array of the following type:
  74.   struct pcmcia_state {
  75.     unsigned detect: 1,
  76.               ready: 1,
  77.                bvd1: 1,
  78.                bvd2: 1,
  79.              wrprot: 1,
  80.               vs_3v: 1,
  81.               vs_Xv: 1;
  82.   };
  83. Upon return from the operation, a struct pcmcia_state should be filled in
  84. for each socket available in the hardware. For every array element (up to
  85. `size' in the struct pcmcia_state_saarray) which does not correspond to an
  86. available socket, zero the element bits. (This includes element [0] if
  87. socket zero is not used.)
  88. Regardless of how the various signals are routed to the SA-1100, the bits
  89. in struct pcmcia_state always have the following semantics:
  90.   detect - 1 if a card is fully inserted, 0 otherwise
  91.   ready  - 1 if the card ready signal is asserted, 0 otherwise
  92.   bvd1   - the value of the Battery Voltage Detect 1 signal
  93.   bvd2   - the value of the Battery Voltage Detect 2 signal
  94.   wrprot - 1 if the card is write-protected, 0 otherwise
  95.   vs_3v  - 1 if the card must be operated at 3.3V, 0 otherwise
  96.   vs_Xv  - 1 if the card must be operated at X.XV, 0 otherwise
  97. A note about the BVD signals: if your board does not make both lines
  98. directly observable to the processor, just return reasonable values. The
  99. standard interpretation of the BVD signals is:
  100.   BVD1  BVD2
  101.    0     x    battery is dead
  102.    1     0    battery warning
  103.    1     1    battery ok
  104. Regarding the voltage sense flags (vs_3v, vs_Xv), these bits should be set
  105. based on a sampling of the Voltage Sense pins, if available. The standard
  106. interpretation of the VS signals (for a "low-voltage" socket) is:
  107.   VS1   VS2
  108.    0     0    X.XV, else 3.3V, else none
  109.    0     1    3.3V, else none
  110.    1     0    X.XV, else none
  111.    1     1    5V, else none
  112. More information about the BVD and VS conventions is available in chapter
  113. 5 of "PCMCIA System Architecture," 2nd ed., by Don Anderson.
  114. This operation should return 1 if an IRQ is actually pending for the
  115. socket controller, 0 if no IRQ is pending (but no error condition exists,
  116. such as an undersized state array), or -1 on any error.
  117. 3. get_irq_info(struct pcmcia_irq_info *info)
  118. This operation obtains the IRQ assignment which is legal for the given
  119. socket. An argument of the following type is passed:
  120.   struct pcmcia_irq_info {
  121.     unsigned int sock;
  122.     unsigned int irq ;
  123.   };
  124. The `sock' field contains the socket index being queried. The `irq' field
  125. should contain the IRQ number corresponding to the card ready signal from
  126. the device.
  127. This operation should return 0 on success, or -1 on any error.
  128. 4. configure_socket(const struct pcmcia_configure *configure)
  129. This operation allows the caller to apply power to the socket, issue a
  130. reset, or enable various outputs. The argument is of the following type:
  131.   struct pcmcia_configure {
  132.     unsigned sock: 8,
  133.               vcc: 8,
  134.               vpp: 8,
  135.            output: 1,
  136.           speaker: 1,
  137.             reset: 1;
  138.   };
  139. The `sock' field contains the index of the socket to be configured. The
  140. `vcc' and `vpp' fields contain the voltages to be applied for Vcc and Vpp,
  141. respectively, in units of 0.1V. (Note that vpp==120 indicates that
  142. programming voltage should be applied.)
  143. The two output enables, `output' and `speaker', refer to the card data
  144. signal enable and the card speaker enable, respectively. The `reset' bit,
  145. when set, indicates that the card reset should be asserted.
  146. This operation should return 0 on success, or -1 on any error.
  147. Board-Specific Notes
  148. The following information is known about various SA-11x0 board designs
  149. which may be used as reference while adding support to the kernel.
  150. Carnegie Mellon Itsy/Cue (http://www.cs.cmu.edu/~wearable/itsy/)
  151.   Itsy Chip Select 3 (CS3) Interface
  152.   ("ITSY MEMORY/PCMCIA ADD-ON BOARD with BATTERY and CHARGER CIRCUITRY,"
  153.    memo dated 5-20-99, from Tim Manns to Richard Martin, et. al)
  154.   Read:
  155.     ABVD2    (SS)D0          A slot, Battery Voltage Detect
  156.     ABVD1    (SS)D1
  157.     AVSS2    (SS)D2          A slot, Voltage Sense
  158.     AVSS1    (SS)D3
  159.     GND      (SS)D4
  160.     GND      (SS)D5
  161.     GND      (SS)D6
  162.     GND      (SS)D7
  163.   
  164.     BBVD2    (SS)D8          B slot, Battery Voltage Detect
  165.     BBVD1    (SS)D9
  166.     BVSS2    (SS)D10         B slot, Voltage Sense
  167.     BVSS1    (SS)D11
  168.     GND      (SS)D12
  169.     GND      (SS)D13
  170.     GND      (SS)D14
  171.     GND      (SS)D15
  172.   
  173.   Write:
  174.     (SS)D0   A_VPP_VCC       LTC1472 VPPEN1
  175.     (SS)D1   A_VPP_PGM       LTC1472 VPPEN0
  176.     (SS)D2   A_VCC_3         LTC1472 VCCEN0
  177.     (SS)D3   A_VCC_5         LTC1472 VCCEN1
  178.     (SS)D4   RESET (A SLOT)
  179.     (SS)D5   GND
  180.     (SS)D6   GND
  181.     (SS)D7   GND
  182.  
  183.     (SS)D8   B_VPP_VCC       LTC1472 VPPEN1
  184.     (SS)D9   B_VPP_PGM       LTC1472 VPPEN0
  185.     (SS)D10  B_VCC_3         LTC1472 VCCEN0
  186.     (SS)D11  B_VCC_5         LTC1472 VCCEN1
  187.     (SS)D12  RESET (B SLOT)
  188.     (SS)D13  GND
  189.     (SS)D14  GND
  190.     (SS)D15  GND
  191.  
  192.   GPIO pin assignments are as follows: (from schematics)
  193.  
  194.     GPIO 10                  Slot 0 Card Detect
  195.     GPIO 11                  Slot 1 Card Detect
  196.     GPIO 12                  Slot 0 Ready/Interrupt
  197.     GPIO 13                  Slot 1 Ready/Interrupt
  198. Intel SA-1100 Multimedia Board (http://developer.intel.com/design/strong/)
  199.   CPLD Registers
  200.   SA-1100 Multimedia Development Board with Companion SA-1101 Development
  201.     Board User's Guide, p.4-42
  202.   This SA-1100/1101 development package uses only one GPIO pin (24) to
  203.   signal changes in card status, and requires software to inspect a
  204.   PCMCIA status register to determine the source.
  205.   Read: (PCMCIA Power Sense Register - 0x19400000)
  206.     S0VS1           0        Slot 0 voltage sense
  207.     S0VS2           1
  208.     S0BVD1          2        Slot 0 battery voltage sense
  209.     S0BVD2          3
  210.     S1VS1           4        Slot 1 voltage sense
  211.     S1VS2           5
  212.     S1BVD1          6        Slot 1 battery voltage sense
  213.     S1BVD2          7
  214.   Read/Write: (PCMCIA Power Control Register - 0x19400002)
  215.     S0VPP0          0        Slot 0 Vpp
  216.     S0VPP1          1
  217.     S0VCC0          2        Slot 0 Vcc
  218.     S0VCC1          3
  219.     S1VPP0          4        Slot 1 Vpp
  220.     S1VPP1          5
  221.     S1VCC0          6        Slot 1 Vcc
  222.     S1VCC1          7
  223.   Read: (PCMCIA Status Register - 0x19400004)
  224.     S0CD1           0        Slot 0 Card Detect 1
  225.     S0RDY           1        Slot 0 Ready/Interrupt
  226.     S0STSCHG        2        Slot 0 Status Change
  227.     S0Reset         3        Slot 0 Reset (RW)
  228.     S1CD1           4        Slot 1 Card Detect 1
  229.     S1RDY           5        Slot 1 Ready/Interrupt
  230.     S1STSCHG        6        Slot 1 Status Change
  231.     S1Reset         7        Slot 1 Reset (RW)
  232. Intel SA-1100 Evaluation Platform (http://developer.intel.com/design/strong/)
  233.   Brutus I/O Pins and Chipselect Register
  234.   pcmcia-brutus.c, by Ivo Clarysse
  235.   (What's the official reference for this info?)
  236.   This SA-1100 development board uses more GPIO pins than say, the Itsy
  237.   or the SA-1100/1101 multimedia package. The pin assignments are as
  238.   follows:
  239.     GPIO 2                   Slot 0 Battery Voltage Detect 1
  240.     GPIO 3                   Slot 0 Ready/Interrupt
  241.     GPIO 4                   Slot 0 Card Detect
  242.     GPIO 5                   Slot 1 Battery Voltage Detect 1
  243.     GPIO 6                   Slot 1 Ready/Interrupt
  244.     GPIO 7                   Slot 1 Card Detect
  245.   Like the Itsy, Brutus uses a chipselect register in static memory
  246.   bank 3 for the other signals, such as voltage sense or reset:
  247.   Read:
  248.     P0_VS1          8        Slot 0 Voltage Sense
  249.     P0_VS2          9
  250.     P0_STSCHG      10        Slot 0 Status Change
  251.     P1_VS1         12        Slot 1 Voltage Sense
  252.     P1_VS2         13
  253.     P1_STSCHG      14        Slot 1 Status Change
  254.   Read/Write:
  255.     P0_            16        Slot 0 MAX1600EAI control line
  256.     P0_            17        Slot 0 MAX1600EAI control line
  257.     P0_            18        Slot 0 MAX1600EAI control line
  258.     P0_            19        Slot 0 MAX1600EAI control line
  259.     P0_            20        Slot 0 12V
  260.     P0_            21        Slot 0 Vpp to Vcc (CONFIRM?)
  261.     P0_            22        Slot 0 enable fan-out drivers & xcvrs
  262.     P0_SW_RST      23        Slot 0 Reset
  263.     P1_            24        Slot 1 MAX1600EAI control line
  264.     P1_            25        Slot 1 MAX1600EAI control line
  265.     P1_            26        Slot 1 MAX1600EAI control line
  266.     P1_            27        Slot 1 MAX1600EAI control line
  267.     P1_            28        Slot 1 12V
  268.     P1_            29        Slot 1 Vpp to Vcc (CONFIRM?)
  269.     P1_            30        Slot 1 enable fan-out drivers & xcvrs
  270.     P1_SW_RST      31        Slot 1 Reset
  271.   For each slot, the bits labelled "MAX1600EAI" should (apparently)
  272.   be written with the value 0101 for Vcc 3.3V, and 1001 for Vcc 5V.
  273. Intel SA-1110 Development Platform (http://developer.intel.com/design/strong/)
  274.   GPIO Pin Descriptions and Board Control Register
  275.   SA-1110 Microprocessor Development Board User's Guide, p.4-7, 4-10
  276.   The Assabet board contains only a single Compact Flash slot,
  277.   attached to slot 1 on the SA-1110. Card detect, ready, and BVD
  278.   signals are routed through GPIO, with power and reset placed in a
  279.   control register. Note that the CF bus must be enabled before use.
  280.     GPIO 21                  Slot 1 Compact Flash interrupt
  281.     GPIO 22                  Slot 1 card detect (CD1 NOR CD2)
  282.     GPIO 24                  Slot 1 Battery Voltage Detect 2
  283.     GPIO 25                  Slot 1 Battery Voltage Detect 1
  284.   Write-only: (Board Control Register - 0x12000000)
  285.     CF_PWR          0        CF bus power (3.3V)
  286.     CF_RST          1        CF reset
  287.     CF_Bus_On       7        CF bus enable