Writing Device Drivers

Autoconfiguration

The attach(9E) routine should perform the common initialization tasks that all devices require. Typically, these tasks include:

See "attach()" for code examples of these tasks.

Character device drivers create minor nodes of type S_IFCHR. This causes a character special file representing the node to eventually appear in the /devices hierarchy. Example 9-1 shows a character driver attach(9E) routine.


Example 9-1 Character Driver attach(9E) Routine

static int
xxattach(dev_info_t *dip, ddi_attach_cmd_t cmd)
{
  switch (cmd) {
  case DDI_ATTACH:
		   allocate a state structure and initialize it.
		   map the device's registers.
		   add the device driver's interrupt handler(s).
		   initialize any mutexes and condition variables.
		   create power manageable components.
		  /*
		   * Create the device's minor node. Note that the node_type
		   * argument is set to DDI_NT_TAPE.
		   */
		   if (ddi_create_minor_node(dip, "minor_name", S_IFCHR,
		       minor_number, DDI_NT_TAPE, 0) == DDI_FAILURE) {
			      free resources allocated so far.
			   /* Remove any previously allocated minor nodes */
			   ddi_remove_minor_node(dip, NULL);
			   return (DDI_FAILURE);
		   }
		   ...
		   return (DDI_SUCCESS);	
  case DDI_PM_RESUME:
       For information, see Chapter 8, Power Management  case DDI_RESUME:
       For information, see Chapter 8, Power Management   default:
		    return (DDI_FAILURE);
  	}
}