1 | /* $NetBSD: cardslotvar.h,v 1.16 2009/12/15 22:17:12 snj Exp $ */ |
2 | |
3 | /* |
4 | * Copyright (c) 1999 |
5 | * HAYAKAWA Koichi. All rights reserved. |
6 | * |
7 | * Redistribution and use in source and binary forms, with or without |
8 | * modification, are permitted provided that the following conditions |
9 | * are met: |
10 | * 1. Redistributions of source code must retain the above copyright |
11 | * notice, this list of conditions and the following disclaimer. |
12 | * 2. Redistributions in binary form must reproduce the above copyright |
13 | * notice, this list of conditions and the following disclaimer in the |
14 | * documentation and/or other materials provided with the distribution. |
15 | * |
16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
17 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
19 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, |
20 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
22 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
23 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
24 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
25 | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
26 | * POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
28 | |
29 | #ifndef _DEV_CARDBUS_CARDSLOTVAR_H_ |
30 | #define _DEV_CARDBUS_CARDSLOTVAR_H_ |
31 | |
32 | /* require sys/device.h */ |
33 | /* require sys/queue.h */ |
34 | |
35 | struct cardslot_event; |
36 | |
37 | /* |
38 | * The data structure cardslot_attach_args is the attach argument for |
39 | * PCMCIA (including CardBus and 16-bit card) slot. |
40 | */ |
41 | struct cardslot_attach_args { |
42 | /* for cardbus... */ |
43 | struct cbslot_attach_args *caa_cb_attach; |
44 | |
45 | /* for 16-bit pcmcia */ |
46 | struct pcmciabus_attach_args *caa_16_attach; |
47 | }; |
48 | |
49 | |
50 | /* |
51 | * The data structure cardslot_attach_args is the attach argument for |
52 | * PCMCIA (including CardBus and 16-bit card) slot. |
53 | */ |
54 | struct cardslot_softc { |
55 | device_t sc_dev; |
56 | |
57 | int sc_status; /* the status of slot */ |
58 | |
59 | struct cardbus_softc *sc_cb_softc; |
60 | device_t sc_16_softc; |
61 | |
62 | struct lwp *sc_event_thread; |
63 | int sc_th_enable; /* true if the thread is enabled */ |
64 | |
65 | /* An event queue for the thread which processes slot state events. */ |
66 | |
67 | SIMPLEQ_HEAD(, cardslot_event) sc_events; |
68 | }; |
69 | |
70 | #define CARDSLOT_STATUS_CARD_MASK 0x07 |
71 | #define CARDSLOT_STATUS_CARD_NONE 0x00 /* NO card inserted */ |
72 | #define CARDSLOT_STATUS_CARD_16 0x01 /* 16-bit pcmcia card inserted */ |
73 | #define CARDSLOT_STATUS_CARD_CB 0x02 /* CardBus pcmcia card inserted */ |
74 | #define CARDSLOT_STATUS_UNKNOWN 0x07 /* Unknown card inserted */ |
75 | |
76 | #define CARDSLOT_CARDTYPE(x) ((x) & CARDSLOT_STATUS_CARD_MASK) |
77 | #define CARDSLOT_SET_CARDTYPE(x, type) \ |
78 | do {(x) &= ~CARDSLOT_STATUS_CARD_MASK;\ |
79 | (x) |= (CARDSLOT_STATUS_CARD_MASK & (type));} while(0) |
80 | |
81 | #define CARDSLOT_STATUS_WORK_MASK 0x08 |
82 | #define CARDSLOT_STATUS_WORKING 0x08 /* at least one function works */ |
83 | #define CARDSLOT_STATUS_NOTWORK 0x00 /* no functions are working */ |
84 | |
85 | #define CARDSLOT_WORK(x) ((x) & CARDSLOT_STATUS_WORK_MASK) |
86 | #define CARDSLOT_SET_WORK(x, type) \ |
87 | do {(x) &= ~CARDSLOT_STATUS_WORK_MASK;\ |
88 | (x) |= (CARDSLOT_STATUS_WORK_MASK & (type));} while(0) |
89 | |
90 | |
91 | struct cardslot_event { |
92 | SIMPLEQ_ENTRY(cardslot_event) ce_q; |
93 | |
94 | int ce_type; |
95 | }; |
96 | |
97 | /* ce_type */ |
98 | #define CARDSLOT_EVENT_INSERTION_16 0 |
99 | #define CARDSLOT_EVENT_REMOVAL_16 1 |
100 | |
101 | #define CARDSLOT_EVENT_INSERTION_CB 2 |
102 | #define CARDSLOT_EVENT_REMOVAL_CB 3 |
103 | |
104 | #define IS_CARDSLOT_INSERT_REMOVE_EV(x) (0 <= (x) && (x) <= 3) |
105 | |
106 | void cardslot_event_throw(struct cardslot_softc *, int); |
107 | |
108 | #endif /* !_DEV_CARDBUS_CARDSLOTVAR_H_ */ |
109 | |