rom/exec: implementation of task specific storage.
[AROS.git] / arch / m68k-amiga / card / cardforcechange.c
blob3f4d7ced3ceff9af5a4690bbc3c04790f7b7f9d6
1 /*
2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
3 $Id: cardforcechange.c $
5 Desc: CardForceChange() function.
6 Lang: english
7 */
9 #include <proto/exec.h>
11 #include "card_intern.h"
13 AROS_LH0(ULONG, CardForceChange,
14 struct CardResource*, CardResource, 15, Cardres)
16 AROS_LIBFUNC_INIT
18 struct CardHandle *cah = CardResource->ownedcard;
20 CARDDEBUG(bug("CardForceChange()\n"));
22 if (CardResource->resetberr & GAYLE_IRQ_RESET)
23 return FALSE;
25 pcmcia_reset(CardResource);
26 CardResource->removed = TRUE;
27 pcmcia_removeowner(CardResource);
29 if (pcmcia_havecard()) {
30 /* Simulate re-insertion of current card */
31 CardResource->disabled = TRUE;
32 if (cah != NULL)
33 Enqueue(&CardResource->handles, &cah->cah_CardNode);
34 pcmcia_cardreset(CardResource);
35 pcmcia_enable_interrupts();
36 Signal(CardResource->task, CardResource->signalmask);
37 } else {
38 pcmcia_enable_interrupts();
41 return TRUE;
43 AROS_LIBFUNC_EXIT