FreeBSD kernel PCCARD device code
pccardvar.h File Reference
#include "card_if.h"
Include dependency graph for pccardvar.h:

Go to the source code of this file.

Data Structures

struct  pccard_io_handle
 
struct  pccard_mem_handle
 
struct  pccard_tuple
 
struct  pccard_product
 

Macros

#define PCCARD_IO_ALLOCATED   0x01 /* i/o space was allocated */
 
#define PCCARD_MEM_16BIT   1 /* 1 -> 16bit 0 -> 8bit */
 
#define PCCARD_MEM_ATTR   2 /* 1 -> attribute mem 0 -> common */
 
#define PCCARD_WIDTH_AUTO   0
 
#define PCCARD_WIDTH_IO8   1
 
#define PCCARD_WIDTH_IO16   2
 
#define PCCARD_VENDOR_ANY   (0xffffffff)
 
#define PCCARD_PRODUCT_ANY   (0xffffffff)
 
#define PCCARD_PNP_DESCR   "D:#;V32:manufacturer;V32:product;Z:cisvendor;Z:cisproduct;"
 
#define PCCARD_PNP_INFO(t)    MODULE_PNP_INFO(PCCARD_PNP_DESCR, pccard, t, t, nitems(t) - 1)
 
#define pccard_cis_read_1(tuple, idx0)    (bus_space_read_1((tuple)->memt, (tuple)->memh, (tuple)->mult*(idx0)))
 
#define pccard_tuple_read_1(tuple, idx1)    (pccard_cis_read_1((tuple), ((tuple)->ptr+(2+(idx1)))))
 
#define pccard_tuple_read_2(tuple, idx2)
 
#define pccard_tuple_read_3(tuple, idx3)
 
#define pccard_tuple_read_4(tuple, idx4)
 
#define pccard_tuple_read_n(tuple, n, idxn)
 
#define PCCARD_SPACE_MEMORY   1
 
#define PCCARD_SPACE_IO   2
 
#define pccard_mfc(sc)
 
#define PCCARD_ACCESSOR(A, B, T)
 
#define PCCARD_S(a, b)   PCMCIA_STR_ ## a ## _ ## b
 
#define PCCARD_P(a, b)   PCMCIA_PRODUCT_ ## a ## _ ## b
 
#define PCCARD_C(a, b)   PCMCIA_CIS_ ## a ## _ ## b
 
#define PCMCIA_CARD_D(v, p)
 
#define PCMCIA_CARD(v, p)
 
#define PFD_I_V_MASK   0x3
 
#define PFD_I_V_NONE_REQUIRED   0x0
 
#define PFD_I_V_REQ_MOD_ACC   0x1
 
#define PFD_I_V_REQ_ACC   0x2
 
#define PFD_I_V_REQ_ALWYS   0x1
 
#define PFD_I_S   0x4 /* 0 rotating, 1 silicon */
 
#define PFD_I_U   0x8 /* SN Uniq? */
 
#define PFD_I_D   0x10 /* 0 - 1 drive, 1 - 2 drives */
 
#define PFD_P_P0   0x100
 
#define PFD_P_P1   0x200
 
#define PFD_P_P2   0x400
 
#define PFD_P_P3   0x800
 
#define PFD_P_N   0x1000 /* 3f7/377 excluded? */
 
#define PFD_P_E   0x2000 /* Index bit supported? */
 
#define PFD_P_I   0x4000 /* twincard */
 

Typedefs

typedef int(* pccard_scan_t) (const struct pccard_tuple *, void *)
 
typedef int(* pccard_product_match_fn) (device_t dev, const struct pccard_product *ent, int vpfmatch)
 

Enumerations

enum  {
  PCCARD_IVAR_ETHADDR , PCCARD_IVAR_VENDOR , PCCARD_IVAR_PRODUCT , PCCARD_IVAR_PRODEXT ,
  PCCARD_IVAR_FUNCTION_NUMBER , PCCARD_IVAR_VENDOR_STR , PCCARD_IVAR_PRODUCT_STR , PCCARD_IVAR_CIS3_STR ,
  PCCARD_IVAR_CIS4_STR , PCCARD_IVAR_FUNCTION , PCCARD_IVAR_FUNCE_DISK
}
 
enum  { PCCARD_A_MEM_COM , PCCARD_A_MEM_ATTR , PCCARD_A_MEM_8BIT , PCCARD_A_MEM_16BIT }
 

Functions

static const struct pccard_productpccard_product_lookup (device_t dev, const struct pccard_product *tab, size_t ent_size, pccard_product_match_fn matchfn)
 
static int pccard_cis_scan (device_t dev, pccard_scan_t fct, void *arg)
 
static int pccard_attr_read_1 (device_t dev, uint32_t offset, uint8_t *val)
 
static int pccard_attr_write_1 (device_t dev, uint32_t offset, uint8_t val)
 
static int pccard_ccr_read_1 (device_t dev, uint32_t offset, uint8_t *val)
 
static int pccard_ccr_write_1 (device_t dev, uint32_t offset, uint8_t val)
 
int pccard_select_cfe (device_t dev, int entry)
 

Macro Definition Documentation

◆ PCCARD_ACCESSOR

#define PCCARD_ACCESSOR (   A,
  B,
 
)
Value:
static inline int \
pccard_get_ ## A(device_t dev, T *t) \
{ \
return BUS_READ_IVAR(device_get_parent(dev), dev, \
PCCARD_IVAR_ ## B, (uintptr_t *) t); \
}

Definition at line 208 of file pccardvar.h.

◆ PCCARD_C

#define PCCARD_C (   a,
 
)    PCMCIA_CIS_ ## a ## _ ## b

Definition at line 238 of file pccardvar.h.

◆ pccard_cis_read_1

#define pccard_cis_read_1 (   tuple,
  idx0 
)     (bus_space_read_1((tuple)->memt, (tuple)->memh, (tuple)->mult*(idx0)))

Definition at line 124 of file pccardvar.h.

◆ PCCARD_IO_ALLOCATED

#define PCCARD_IO_ALLOCATED   0x01 /* i/o space was allocated */

Definition at line 47 of file pccardvar.h.

◆ PCCARD_MEM_16BIT

#define PCCARD_MEM_16BIT   1 /* 1 -> 16bit 0 -> 8bit */

Definition at line 63 of file pccardvar.h.

◆ PCCARD_MEM_ATTR

#define PCCARD_MEM_ATTR   2 /* 1 -> attribute mem 0 -> common */

Definition at line 64 of file pccardvar.h.

◆ pccard_mfc

#define pccard_mfc (   sc)
Value:
(STAILQ_FIRST(&(sc)->card.pf_head) && \
STAILQ_NEXT(STAILQ_FIRST(&(sc)->card.pf_head),pf_list))

Definition at line 154 of file pccardvar.h.

◆ PCCARD_P

#define PCCARD_P (   a,
 
)    PCMCIA_PRODUCT_ ## a ## _ ## b

Definition at line 237 of file pccardvar.h.

◆ PCCARD_PNP_DESCR

#define PCCARD_PNP_DESCR   "D:#;V32:manufacturer;V32:product;Z:cisvendor;Z:cisproduct;"

Note: There's no cis3 or cis4 reported for NOMATCH / pnpinfo events for pccard. It's unclear if we actually need that for automatic loading or not. These strings are informative, according to the standard. Some Linux drivers match on them, for example. However, FreeBSD's hardware probing is a little different than Linux, so it turns out we don't need them. Some cards use CIS3 or CIS4 for a textual representation of the MAC address. In short, belief that all the entries in Linux don't actually need to be separate there either, but they persist since it's hard to eliminate them and retest on old, possibly rare, hardware. Despite years of collecting ~300 different PC Cards off E-Bay, I've not been able to find any that need CIS3/CIS4 to select which device attaches.

Definition at line 103 of file pccardvar.h.

◆ PCCARD_PNP_INFO

#define PCCARD_PNP_INFO (   t)     MODULE_PNP_INFO(PCCARD_PNP_DESCR, pccard, t, t, nitems(t) - 1)

Definition at line 104 of file pccardvar.h.

◆ PCCARD_PRODUCT_ANY

#define PCCARD_PRODUCT_ANY   (0xffffffff)

Definition at line 85 of file pccardvar.h.

◆ PCCARD_S

#define PCCARD_S (   a,
 
)    PCMCIA_STR_ ## a ## _ ## b

Definition at line 236 of file pccardvar.h.

◆ PCCARD_SPACE_IO

#define PCCARD_SPACE_IO   2

Definition at line 152 of file pccardvar.h.

◆ PCCARD_SPACE_MEMORY

#define PCCARD_SPACE_MEMORY   1

Definition at line 151 of file pccardvar.h.

◆ pccard_tuple_read_1

#define pccard_tuple_read_1 (   tuple,
  idx1 
)     (pccard_cis_read_1((tuple), ((tuple)->ptr+(2+(idx1)))))

Definition at line 127 of file pccardvar.h.

◆ pccard_tuple_read_2

#define pccard_tuple_read_2 (   tuple,
  idx2 
)
Value:
(pccard_tuple_read_1((tuple), (idx2)) | \
(pccard_tuple_read_1((tuple), (idx2)+1)<<8))
#define pccard_tuple_read_1(tuple, idx1)
Definition: pccardvar.h:127

Definition at line 130 of file pccardvar.h.

◆ pccard_tuple_read_3

#define pccard_tuple_read_3 (   tuple,
  idx3 
)
Value:
(pccard_tuple_read_1((tuple), (idx3)) | \
(pccard_tuple_read_1((tuple), (idx3)+1)<<8) | \
(pccard_tuple_read_1((tuple), (idx3)+2)<<16))

Definition at line 134 of file pccardvar.h.

◆ pccard_tuple_read_4

#define pccard_tuple_read_4 (   tuple,
  idx4 
)
Value:
(pccard_tuple_read_1((tuple), (idx4)) | \
(pccard_tuple_read_1((tuple), (idx4)+1)<<8) | \
(pccard_tuple_read_1((tuple), (idx4)+2)<<16) | \
(pccard_tuple_read_1((tuple), (idx4)+3)<<24))

Definition at line 139 of file pccardvar.h.

◆ pccard_tuple_read_n

#define pccard_tuple_read_n (   tuple,
  n,
  idxn 
)
Value:
(((n)==1)?pccard_tuple_read_1((tuple), (idxn)) : \
(((n)==2)?pccard_tuple_read_2((tuple), (idxn)) : \
(((n)==3)?pccard_tuple_read_3((tuple), (idxn)) : \
/* n == 4 */ pccard_tuple_read_4((tuple), (idxn)))))
#define pccard_tuple_read_2(tuple, idx2)
Definition: pccardvar.h:130
#define pccard_tuple_read_4(tuple, idx4)
Definition: pccardvar.h:139
#define pccard_tuple_read_3(tuple, idx3)
Definition: pccardvar.h:134

Definition at line 145 of file pccardvar.h.

◆ PCCARD_VENDOR_ANY

#define PCCARD_VENDOR_ANY   (0xffffffff)

Definition at line 83 of file pccardvar.h.

◆ PCCARD_WIDTH_AUTO

#define PCCARD_WIDTH_AUTO   0

Definition at line 66 of file pccardvar.h.

◆ PCCARD_WIDTH_IO16

#define PCCARD_WIDTH_IO16   2

Definition at line 68 of file pccardvar.h.

◆ PCCARD_WIDTH_IO8

#define PCCARD_WIDTH_IO8   1

Definition at line 67 of file pccardvar.h.

◆ PCMCIA_CARD

#define PCMCIA_CARD (   v,
 
)
Value:
{ PCCARD_S(v, p), PCMCIA_VENDOR_ ## v, \
PCCARD_P(v, p), PCCARD_C(v, p) }
#define PCCARD_C(a, b)
Definition: pccardvar.h:238
#define PCCARD_S(a, b)
Definition: pccardvar.h:236

Definition at line 241 of file pccardvar.h.

◆ PCMCIA_CARD_D

#define PCMCIA_CARD_D (   v,
 
)
Value:
{ PCCARD_S(v, p), PCMCIA_VENDOR_ ## v, \
PCCARD_P(v, p), PCCARD_C(v, p) }

Definition at line 239 of file pccardvar.h.

◆ PFD_I_D

#define PFD_I_D   0x10 /* 0 - 1 drive, 1 - 2 drives */

Definition at line 255 of file pccardvar.h.

◆ PFD_I_S

#define PFD_I_S   0x4 /* 0 rotating, 1 silicon */

Definition at line 253 of file pccardvar.h.

◆ PFD_I_U

#define PFD_I_U   0x8 /* SN Uniq? */

Definition at line 254 of file pccardvar.h.

◆ PFD_I_V_MASK

#define PFD_I_V_MASK   0x3

Definition at line 248 of file pccardvar.h.

◆ PFD_I_V_NONE_REQUIRED

#define PFD_I_V_NONE_REQUIRED   0x0

Definition at line 249 of file pccardvar.h.

◆ PFD_I_V_REQ_ACC

#define PFD_I_V_REQ_ACC   0x2

Definition at line 251 of file pccardvar.h.

◆ PFD_I_V_REQ_ALWYS

#define PFD_I_V_REQ_ALWYS   0x1

Definition at line 252 of file pccardvar.h.

◆ PFD_I_V_REQ_MOD_ACC

#define PFD_I_V_REQ_MOD_ACC   0x1

Definition at line 250 of file pccardvar.h.

◆ PFD_P_E

#define PFD_P_E   0x2000 /* Index bit supported? */

Definition at line 261 of file pccardvar.h.

◆ PFD_P_I

#define PFD_P_I   0x4000 /* twincard */

Definition at line 262 of file pccardvar.h.

◆ PFD_P_N

#define PFD_P_N   0x1000 /* 3f7/377 excluded? */

Definition at line 260 of file pccardvar.h.

◆ PFD_P_P0

#define PFD_P_P0   0x100

Definition at line 256 of file pccardvar.h.

◆ PFD_P_P1

#define PFD_P_P1   0x200

Definition at line 257 of file pccardvar.h.

◆ PFD_P_P2

#define PFD_P_P2   0x400

Definition at line 258 of file pccardvar.h.

◆ PFD_P_P3

#define PFD_P_P3   0x800

Definition at line 259 of file pccardvar.h.

Typedef Documentation

◆ pccard_product_match_fn

typedef int(* pccard_product_match_fn) (device_t dev, const struct pccard_product *ent, int vpfmatch)

Definition at line 107 of file pccardvar.h.

◆ pccard_scan_t

typedef int(* pccard_scan_t) (const struct pccard_tuple *, void *)

Definition at line 79 of file pccardvar.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
PCCARD_IVAR_ETHADDR 
PCCARD_IVAR_VENDOR 
PCCARD_IVAR_PRODUCT 
PCCARD_IVAR_PRODEXT 
PCCARD_IVAR_FUNCTION_NUMBER 
PCCARD_IVAR_VENDOR_STR 
PCCARD_IVAR_PRODUCT_STR 
PCCARD_IVAR_CIS3_STR 
PCCARD_IVAR_CIS4_STR 
PCCARD_IVAR_FUNCTION 
PCCARD_IVAR_FUNCE_DISK 

Definition at line 194 of file pccardvar.h.

◆ anonymous enum

anonymous enum
Enumerator
PCCARD_A_MEM_COM 
PCCARD_A_MEM_ATTR 
PCCARD_A_MEM_8BIT 
PCCARD_A_MEM_16BIT 

Definition at line 229 of file pccardvar.h.

Function Documentation

◆ pccard_attr_read_1()

static int pccard_attr_read_1 ( device_t  dev,
uint32_t  offset,
uint8_t *  val 
)
inlinestatic

Definition at line 167 of file pccardvar.h.

◆ pccard_attr_write_1()

static int pccard_attr_write_1 ( device_t  dev,
uint32_t  offset,
uint8_t  val 
)
inlinestatic

Definition at line 173 of file pccardvar.h.

◆ pccard_ccr_read_1()

static int pccard_ccr_read_1 ( device_t  dev,
uint32_t  offset,
uint8_t *  val 
)
inlinestatic

Definition at line 179 of file pccardvar.h.

◆ pccard_ccr_write_1()

static int pccard_ccr_write_1 ( device_t  dev,
uint32_t  offset,
uint8_t  val 
)
inlinestatic

Definition at line 185 of file pccardvar.h.

◆ pccard_cis_scan()

static int pccard_cis_scan ( device_t  dev,
pccard_scan_t  fct,
void *  arg 
)
inlinestatic

Definition at line 161 of file pccardvar.h.

◆ pccard_product_lookup()

static const struct pccard_product * pccard_product_lookup ( device_t  dev,
const struct pccard_product tab,
size_t  ent_size,
pccard_product_match_fn  matchfn 
)
inlinestatic

Definition at line 117 of file pccardvar.h.

◆ pccard_select_cfe()

int pccard_select_cfe ( device_t  dev,
int  entry 
)