Lines Matching refs:card
66 act2000_card *card = dev_id; in act2000_isa_interrupt() local
74 act2000_isa_receive(card); in act2000_isa_interrupt()
83 printk(KERN_DEBUG "act2000: ?IRQ %d %02x\n", card->irq, istatus); in act2000_isa_interrupt()
88 act2000_isa_select_irq(act2000_card *card) in act2000_isa_select_irq() argument
93 switch (card->irq) { in act2000_isa_select_irq()
120 act2000_isa_enable_irq(act2000_card *card) in act2000_isa_enable_irq() argument
122 act2000_isa_select_irq(card); in act2000_isa_enable_irq()
132 act2000_isa_config_irq(act2000_card *card, short irq) in act2000_isa_config_irq() argument
136 if (card->flags & ACT2000_FLAGS_IVALID) { in act2000_isa_config_irq()
137 free_irq(card->irq, card); in act2000_isa_config_irq()
139 card->flags &= ~ACT2000_FLAGS_IVALID; in act2000_isa_config_irq()
144 old_irq = card->irq; in act2000_isa_config_irq()
145 card->irq = irq; in act2000_isa_config_irq()
146 if (request_irq(irq, &act2000_isa_interrupt, 0, card->regname, card)) { in act2000_isa_config_irq()
147 card->irq = old_irq; in act2000_isa_config_irq()
148 card->flags |= ACT2000_FLAGS_IVALID; in act2000_isa_config_irq()
153 act2000_isa_select_irq(card); in act2000_isa_config_irq()
162 act2000_isa_config_port(act2000_card *card, unsigned short portbase) in act2000_isa_config_port() argument
164 if (card->flags & ACT2000_FLAGS_PVALID) { in act2000_isa_config_port()
165 release_region(card->port, ISA_REGION); in act2000_isa_config_port()
166 card->flags &= ~ACT2000_FLAGS_PVALID; in act2000_isa_config_port()
168 if (request_region(portbase, ACT2000_PORTLEN, card->regname) == NULL) in act2000_isa_config_port()
171 card->port = portbase; in act2000_isa_config_port()
172 card->flags |= ACT2000_FLAGS_PVALID; in act2000_isa_config_port()
181 act2000_isa_release(act2000_card *card) in act2000_isa_release() argument
185 spin_lock_irqsave(&card->lock, flags); in act2000_isa_release()
186 if (card->flags & ACT2000_FLAGS_IVALID) in act2000_isa_release()
187 free_irq(card->irq, card); in act2000_isa_release()
189 card->flags &= ~ACT2000_FLAGS_IVALID; in act2000_isa_release()
190 if (card->flags & ACT2000_FLAGS_PVALID) in act2000_isa_release()
191 release_region(card->port, ISA_REGION); in act2000_isa_release()
192 card->flags &= ~ACT2000_FLAGS_PVALID; in act2000_isa_release()
193 spin_unlock_irqrestore(&card->lock, flags); in act2000_isa_release()
197 act2000_isa_writeb(act2000_card *card, u_char data) in act2000_isa_writeb() argument
214 act2000_isa_readb(act2000_card *card, u_char *data) in act2000_isa_readb() argument
231 act2000_isa_receive(act2000_card *card) in act2000_isa_receive() argument
235 if (test_and_set_bit(ACT2000_LOCK_RX, (void *) &card->ilock) != 0) in act2000_isa_receive()
237 while (!act2000_isa_readb(card, &c)) { in act2000_isa_receive()
238 if (card->idat.isa.rcvidx < 8) { in act2000_isa_receive()
239 card->idat.isa.rcvhdr[card->idat.isa.rcvidx++] = c; in act2000_isa_receive()
240 if (card->idat.isa.rcvidx == 8) { in act2000_isa_receive()
241 int valid = actcapi_chkhdr(card, (actcapi_msghdr *)&card->idat.isa.rcvhdr); in act2000_isa_receive()
244 card->idat.isa.rcvlen = ((actcapi_msghdr *)&card->idat.isa.rcvhdr)->len; in act2000_isa_receive()
245 card->idat.isa.rcvskb = dev_alloc_skb(card->idat.isa.rcvlen); in act2000_isa_receive()
246 if (card->idat.isa.rcvskb == NULL) { in act2000_isa_receive()
247 card->idat.isa.rcvignore = 1; in act2000_isa_receive()
250 test_and_clear_bit(ACT2000_LOCK_RX, (void *) &card->ilock); in act2000_isa_receive()
253 memcpy(skb_put(card->idat.isa.rcvskb, 8), card->idat.isa.rcvhdr, 8); in act2000_isa_receive()
254 card->idat.isa.rcvptr = skb_put(card->idat.isa.rcvskb, card->idat.isa.rcvlen - 8); in act2000_isa_receive()
256 card->idat.isa.rcvidx = 0; in act2000_isa_receive()
261 for (i = 0, p = (__u8 *)&card->idat.isa.rcvhdr, t = tmp; i < 8; i++) in act2000_isa_receive()
268 if (!card->idat.isa.rcvignore) in act2000_isa_receive()
269 *card->idat.isa.rcvptr++ = c; in act2000_isa_receive()
270 if (++card->idat.isa.rcvidx >= card->idat.isa.rcvlen) { in act2000_isa_receive()
271 if (!card->idat.isa.rcvignore) { in act2000_isa_receive()
272 skb_queue_tail(&card->rcvq, card->idat.isa.rcvskb); in act2000_isa_receive()
273 act2000_schedule_rx(card); in act2000_isa_receive()
275 card->idat.isa.rcvidx = 0; in act2000_isa_receive()
276 card->idat.isa.rcvlen = 8; in act2000_isa_receive()
277 card->idat.isa.rcvignore = 0; in act2000_isa_receive()
278 card->idat.isa.rcvskb = NULL; in act2000_isa_receive()
279 card->idat.isa.rcvptr = card->idat.isa.rcvhdr; in act2000_isa_receive()
283 if (!(card->flags & ACT2000_FLAGS_IVALID)) { in act2000_isa_receive()
285 if ((card->idat.isa.rcvidx) && in act2000_isa_receive()
286 (card->idat.isa.rcvignore || in act2000_isa_receive()
287 (card->idat.isa.rcvidx < card->idat.isa.rcvlen))) in act2000_isa_receive()
288 act2000_schedule_poll(card); in act2000_isa_receive()
290 test_and_clear_bit(ACT2000_LOCK_RX, (void *) &card->ilock); in act2000_isa_receive()
294 act2000_isa_send(act2000_card *card) in act2000_isa_send() argument
301 if (test_and_set_bit(ACT2000_LOCK_TX, (void *) &card->ilock) != 0) in act2000_isa_send()
304 spin_lock_irqsave(&card->lock, flags); in act2000_isa_send()
305 if (!(card->sbuf)) { in act2000_isa_send()
306 if ((card->sbuf = skb_dequeue(&card->sndq))) { in act2000_isa_send()
307 card->ack_msg = card->sbuf->data; in act2000_isa_send()
308 msg = (actcapi_msg *)card->sbuf->data; in act2000_isa_send()
312 card->need_b3ack = msg->msg.data_b3_req.flags; in act2000_isa_send()
317 spin_unlock_irqrestore(&card->lock, flags); in act2000_isa_send()
318 if (!(card->sbuf)) { in act2000_isa_send()
320 test_and_clear_bit(ACT2000_LOCK_TX, (void *) &card->ilock); in act2000_isa_send()
323 skb = card->sbuf; in act2000_isa_send()
326 if (act2000_isa_writeb(card, *(skb->data))) { in act2000_isa_send()
328 test_and_clear_bit(ACT2000_LOCK_TX, (void *) &card->ilock); in act2000_isa_send()
330 act2000_schedule_tx(card); in act2000_isa_send()
336 msg = (actcapi_msg *)card->ack_msg; in act2000_isa_send()
343 skb->data = card->ack_msg; in act2000_isa_send()
345 msg->msg.data_b3_req.flags = card->need_b3ack; in act2000_isa_send()
346 skb_queue_tail(&card->ackq, skb); in act2000_isa_send()
349 card->sbuf = NULL; in act2000_isa_send()
357 act2000_isa_getid(act2000_card *card) in act2000_isa_getid() argument
367 if (act2000_isa_readb(card, p++)) in act2000_isa_getid()
384 if (card->flags & ACT2000_FLAGS_IVALID) { in act2000_isa_getid()
386 act2000_isa_enable_irq(card); in act2000_isa_getid()
395 act2000_isa_download(act2000_card *card, act2000_ddef __user *cb) in act2000_isa_download() argument
406 if (!act2000_isa_reset(card->port)) in act2000_isa_download()
428 if (act2000_isa_writeb(card, *b++)) { in act2000_isa_download()
442 return (act2000_isa_getid(card)); in act2000_isa_download()