内に含ま
その他のドキュメント
サポート リソース
| PDF 文書ファイルをダウンロードする
NAME
- csx_event_handler - PC Card driver event handler
SYNOPSIS
-
-
#include <sys/pccard.h>
-
int32_t prefix event_handler(event_t event, int32_t priority,
-
event_callback_args_t * args);
INTERFACE LEVEL
- Solaris architecture specific (Solaris DDI)
ARGUMENTS
-
-
event
- The event.
-
-
priority
- The priority of the event.
-
-
args
- A pointer to the event_callback_t structure.
DESCRIPTION
- Each instance of a PC Card driver must register an event handler to manage events associated with its PC Card. The driver event handler is registered using the event_handler field of the client_req_t structure passed to csx_RegisterClient(9F). The driver may also supply a parameter to be passed to its event handler function using the event_callback_args.client_data field. Typically, this argument is the driver instance's soft state pointer. The driver also registers which events it is interested in receiving through the EventMask field of the client_req_t structure.
- Each event is delivered to the driver with a priority, priority. High priority events with CS_EVENT_PRI_HIGH set in priority are delivered above lock level, and the driver must use its high-level event mutex initialized with the iblk_cookie returned by csx_RegisterClient(9F) to protect such events. Low priority events with CS_EVENT_PRI_LOW set in priority are delivered below lock level, and the driver must use its low-level event mutex initialized with a NULL interrupt cookie to protect these events.
-
csx_RegisterClient(9F) registers the driver's event handler, but no events begin to be delivered to the driver until after a successful call to csx_RequestSocketMask(9F).
- In all cases, Card Services delivers an event to each driver instance associated with a function on a multiple function PC Card.
Event Indications
- The events and their indications are listed below; they are always delivered as low priority unless otherwise noted:
-
CS_EVENT_REGISTRATION_COMPLETE
- A registration request processed in the background has been completed.
-
-
CS_EVENT_CARD_INSERTION
- A PC Card has been inserted in a socket.
-
-
CS_EVENT_CARD_READY
- A PC Card's READY line has transitioned from the busy to ready state.
-
-
CS_EVENT_CARD_REMOVAL
- A PC Card has been removed from a socket.
- This event is delivered twice; first as a high priority event, followed by delivery as a low priority event.
- As a high priority event, the event handler should only note that the PC Card is no longer present to prevent accesses to the hardware from occurring.
- As a low priority event, the event handler should release the configuration and free all I/O, window and IRQ resources for use by other PC Cards.
-
-
CS_EVENT_BATTERY_LOW
- The battery on a PC Card is weak and is in need of replacement.
-
-
CS_EVENT_BATTERY_DEAD
- The battery on a PC Card is no longer providing operational voltage.
-
-
CS_EVENT_PM_RESUME
- Card Services has received a resume notification from the system's power management software.
-
-
CS_EVENT_PM_SUSPEND
- Card Services has received a suspend notification from the system's power management software.
-
-
CS_EVENT_CARD_LOCK
- A mechanical latch has been manipulated preventing the removal of the PC Card from the socket.
-
-
CS_EVENT_CARD_UNLOCK
- A mechanical latch has been manipulated allowing the removal of the PC Card from the socket.
-
-
CS_EVENT_EJECTION_REQUEST
- A request that the PC Card be ejected from a socket using a motor-driven mechanism.
-
-
CS_EVENT_EJECTION_COMPLETE
- A motor has completed ejecting a PC Card from a socket.
-
-
CS_EVENT_ERASE_COMPLETE
- A queued erase request that is processed in the background has been completed.
-
-
CS_EVENT_INSERTION_REQUEST
- A request that a PC Card be inserted into a socket using a motor-driven mechanism.
-
-
CS_EVENT_INSERTION_COMPLETE
- A motor has completed inserting a PC Card in a socket.
-
-
CS_EVENT_CARD_RESET
- A hardware reset has occurred.
-
-
CS_EVENT_RESET_REQUEST
- A request for a physical reset by a client.
-
-
CS_EVENT_RESET_COMPLETE
- A reset request that is processed in the background has been completed.
-
-
CS_EVENT_RESET_PHYSICAL
- A reset is about to occur.
-
-
CS_EVENT_CLIENT_INFO
- A request that the client return its client information data. If
-
GET_CLIENT_INFO_SUBSVC(args->client_info.Attributes) is equal to CS_CLIENT_INFO_SUBSVC_CS, the driver should fill in the other fields in the client_info structure as described below, and return CS_SUCCESS . Otherwise, it should return CS_UNSUPPORTED_EVENT .
-
-
args->client_data.Attributes
Must be OR 'edwith CS_CLIENT_INFO_VALID.
-
args->client_data.Revision
- Must be set to a driver-private version number.
-
-
args->client_data.CSLevel
Must be set to CS_VERSION .
-
args->client_data.RevDate
- Must be set to the revision date of the PC Card driver, using
-
CS_CLIENT_INFO_MAKE_DATE(day, month, year). day must be the day of the month, month must be the month of the year, and year must be the year, offset from a base of 1980. For example, this field could be set to a revision date of July 4 1997 with CS_CLIENT_INFO_MAKE_DATE(4, 7, 17).
-
args->client_data.ClientName
- A string describing the PC Card driver should be copied into this space.
-
args->client_data.VendorName
- A string supplying the name of the PC Card driver vendor should be copied into this space.
-
args->client_data.DriverName
- A string supplying the name of the PC Card driver will be copied into this space by Card Services after the PC Card driver has successfully processed this event; the driver does not need to initialize this field.
-
-
CS_EVENT_WRITE_PROTECT
- The write protect status of the PC Card in the indicated socket has changed. The current write protect state of the PC Card is in the args->info field:
-
CS_EVENT_WRITE_PROTECT_WPOFF
- Card is not write protected.
-
CS_EVENT_WRITE_PROTECT_WPON
- Card is write protected.
STRUCTURE MEMBERS
- The structure members of event_callback_args_t are:
-
-
void * info; /* event-specific information * /
void * client_data; /* driver-private data * /
client_info_t client_info; /* client information * /
- The structure members of client_info_t are:
-
-
uint32_t Attributes; /* attributes * /
uint32_t Revision; /* version nunmber * /
uint32_t CSLevel; /* Card Services version * /
uint32_t RevDate; /* revision date * /
char ClientName[CS_CLIENT_INFO_MAX_NAME_LEN];
/* PC Card driver description * /
char VendorName[CS_CLIENT_INFO_MAX_NAME_LEN];
/* PC Card driver vendor name * /
char DriverName[MODMAXNAMELEN];
/* PC Card driver name * /
RETURN VALUES
-
-
CS_SUCCESS
- The event was handled successfully.
-
-
CS_UNSUPPORTED_EVENT
- Driver does not support this event.
-
-
CS_FAILURE
- Error occurred while handling this event.
CONTEXT
- This function is called from high-level interrupt context in the case of high priority events, and from kernel context in the case of low priority events.
EXAMPLES
-
static int
-
-
xx_event(event_t event, int priority, event_callback_args_t * args)
{
int rval;
struct xxx * xxx= args->client_data;
client_info_t * info= &args->client_info;
-
switch (event) {
-
-
case CS_EVENT_REGISTRATION_COMPLETE:
ASSERT(priority & CS_EVENT_PRI_LOW);
mutex_enter(&xxx->event_mutex);
xxx->card_state |= XX_REGISTRATION_COMPLETE;
mutex_exit(&xxx->event_mutex);
rval = CS_SUCCESS;
break;
-
case CS_EVENT_CARD_READY:
-
-
ASSERT(priority & CS_EVENT_PRI_LOW);
mutex_enter(&xxx->event_mutex);
rval = xx_card_ready(xxx);
mutex_exit(&xxx->event_mutex);
break;
-
-
case CS_EVENT_CARD_INSERTION:
ASSERT(priority & CS_EVENT_PRI_LOW);
mutex_enter(&xxx->event_mutex);
rval = xx_card_insertion(xxx);
mutex_exit(&xxx->event_mutex);
break;
-
case CS_EVENT_CARD_REMOVAL:
-
-
if (priority & CS_EVENT_PRI_HIGH) {
mutex_enter(&xxx->hi_event_mutex);
xxx->card_state &= ~XX_CARD_PRESENT;
mutex_exit(&xxx->hi_event_mutex);
} else {
mutex_enter(&xxx->event_mutex);
rval = xx_card_removal(xxx);
mutex_exit(&xxx->event_mutex);
}
break;
-
case CS_EVENT_CLIENT_INFO:
-
-
ASSERT(priority & CS_EVENT_PRI_LOW);
if (GET_CLIENT_INFO_SUBSVC_CS(info->Attributes) ==
CS_CLIENT_INFO_SUBSVC_CS) {
info->Attributes |= CS_CLIENT_INFO_VALID;
info->Revision = 4;
info->CSLevel = CS_VERSION;
info->RevDate = CS_CLIENT_INFO_MAKE_DATE(4, 7, 17);
(void)strncpy(info->ClientName,
"WhizBang Ultra Zowie PC card driver",
CS_CLIENT_INFO_MAX_NAME_LEN);
(void)strncpy(info->VendorName,
"ACME PC card drivers, Inc.",
CS_CLIENT_INFO_MAX_NAME_LEN);
rval = CS_SUCCESS;
} else {
rval = CS_UNSUPPORTED_EVENT;
}
break;
-
case CS_EVENT_WRITE_PROTECT:
-
-
ASSERT(priority & CS_EVENT_PRI_LOW);
mutex_enter(&xxx->event_mutex);
if (args->info == CS_EVENT_WRITE_PROTECT_WPOFF) {
xxx->card_state &= ~XX_WRITE_PROTECTED;
-
-
} else {
xxx->card_state |= XX_WRITE_PROTECTED;
}
mutex_exit(&xxx->event_mutex);
rval = CS_SUCCESS;
break;
-
default:
-
-
rval = CS_UNSUPPORTED_EVENT;
break;
}
-
return (rval);
-
}
SEE ALSO
-
csx_Event2Text(9F), csx_RegisterClient(9F), csx_RequestSocketMask(9F)
-
PC Card 95 Standard, PCMCIA/JEIDA
|
|