The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/aac/aac_debug.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2000 Michael Smith
    3  * Copyright (c) 2001 Scott Long
    4  * Copyright (c) 2000 BSDi
    5  * Copyright (c) 2001 Adaptec, Inc.
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  *
   17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   27  * SUCH DAMAGE.
   28  */
   29 
   30 #include <sys/cdefs.h>
   31 __FBSDID("$FreeBSD$");
   32 
   33 /*
   34  * Debugging support.
   35  */
   36 #include "opt_aac.h"
   37 
   38 #include <sys/param.h>
   39 #include <sys/systm.h>
   40 #include <sys/kernel.h>
   41 #include <sys/conf.h>
   42 
   43 #include <sys/bus.h>
   44 
   45 #include <machine/resource.h>
   46 #include <machine/bus.h>
   47 
   48 #include <dev/aac/aac_compat.h>
   49 #include <dev/aac/aacreg.h>
   50 #include <sys/aac_ioctl.h>
   51 #include <dev/aac/aacvar.h>
   52 
   53 #ifdef AAC_DEBUG
   54 void    aac_printstate0(void);
   55 void    aac_intr0(void);
   56 
   57 /*
   58  * Dump the command queue indices
   59  */
   60 void
   61 aac_print_queues(struct aac_softc *sc)
   62 {
   63         device_printf(sc->aac_dev, "FIB queue header at %p  queues at %p\n",
   64             &sc->aac_queues->qt_qindex[AAC_HOST_NORM_CMD_QUEUE][0],
   65             &sc->aac_queues->qt_HostNormCmdQueue[0]);
   66         device_printf(sc->aac_dev, "HOST_NORM_CMD  %d/%d (%d)\n", 
   67             sc->aac_queues->qt_qindex[AAC_HOST_NORM_CMD_QUEUE][
   68                                       AAC_PRODUCER_INDEX],
   69             sc->aac_queues->qt_qindex[AAC_HOST_NORM_CMD_QUEUE][
   70                                       AAC_CONSUMER_INDEX], 
   71             AAC_HOST_NORM_CMD_ENTRIES);
   72         device_printf(sc->aac_dev, "HOST_HIGH_CMD  %d/%d (%d)\n", 
   73             sc->aac_queues->qt_qindex[AAC_HOST_HIGH_CMD_QUEUE][
   74                                       AAC_PRODUCER_INDEX],
   75             sc->aac_queues->qt_qindex[AAC_HOST_HIGH_CMD_QUEUE][
   76                                       AAC_CONSUMER_INDEX], 
   77             AAC_HOST_HIGH_CMD_ENTRIES);
   78         device_printf(sc->aac_dev, "ADAP_NORM_CMD  %d/%d (%d)\n", 
   79             sc->aac_queues->qt_qindex[AAC_ADAP_NORM_CMD_QUEUE][
   80                                       AAC_PRODUCER_INDEX],
   81             sc->aac_queues->qt_qindex[AAC_ADAP_NORM_CMD_QUEUE][
   82                                       AAC_CONSUMER_INDEX], 
   83             AAC_ADAP_NORM_CMD_ENTRIES);
   84         device_printf(sc->aac_dev, "ADAP_HIGH_CMD  %d/%d (%d)\n", 
   85             sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_CMD_QUEUE][
   86                                       AAC_PRODUCER_INDEX],
   87             sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_CMD_QUEUE][
   88                                       AAC_CONSUMER_INDEX], 
   89             AAC_ADAP_HIGH_CMD_ENTRIES);
   90         device_printf(sc->aac_dev, "HOST_NORM_RESP %d/%d (%d)\n", 
   91             sc->aac_queues->qt_qindex[AAC_HOST_NORM_RESP_QUEUE][
   92                                       AAC_PRODUCER_INDEX],
   93             sc->aac_queues->qt_qindex[AAC_HOST_NORM_RESP_QUEUE][
   94                                       AAC_CONSUMER_INDEX],
   95             AAC_HOST_NORM_RESP_ENTRIES);
   96         device_printf(sc->aac_dev, "HOST_HIGH_RESP %d/%d (%d)\n", 
   97             sc->aac_queues->qt_qindex[AAC_HOST_HIGH_RESP_QUEUE][
   98                                       AAC_PRODUCER_INDEX],
   99             sc->aac_queues->qt_qindex[AAC_HOST_HIGH_RESP_QUEUE][
  100                                       AAC_CONSUMER_INDEX],
  101             AAC_HOST_HIGH_RESP_ENTRIES);
  102         device_printf(sc->aac_dev, "ADAP_NORM_RESP %d/%d (%d)\n", 
  103             sc->aac_queues->qt_qindex[AAC_ADAP_NORM_RESP_QUEUE][
  104                                       AAC_PRODUCER_INDEX],
  105             sc->aac_queues->qt_qindex[AAC_ADAP_NORM_RESP_QUEUE][
  106                                       AAC_CONSUMER_INDEX],
  107             AAC_ADAP_NORM_RESP_ENTRIES);
  108         device_printf(sc->aac_dev, "ADAP_HIGH_RESP %d/%d (%d)\n", 
  109             sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_RESP_QUEUE][
  110                                       AAC_PRODUCER_INDEX],
  111             sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_RESP_QUEUE][
  112                                       AAC_CONSUMER_INDEX],
  113             AAC_ADAP_HIGH_RESP_ENTRIES);
  114         device_printf(sc->aac_dev, "AACQ_FREE      %d/%d\n", 
  115             sc->aac_qstat[AACQ_FREE].q_length, sc->aac_qstat[AACQ_FREE].q_max);
  116         device_printf(sc->aac_dev, "AACQ_BIO       %d/%d\n", 
  117             sc->aac_qstat[AACQ_BIO].q_length, sc->aac_qstat[AACQ_BIO].q_max);
  118         device_printf(sc->aac_dev, "AACQ_READY     %d/%d\n", 
  119             sc->aac_qstat[AACQ_READY].q_length,
  120             sc->aac_qstat[AACQ_READY].q_max);
  121         device_printf(sc->aac_dev, "AACQ_BUSY      %d/%d\n", 
  122             sc->aac_qstat[AACQ_BUSY].q_length, sc->aac_qstat[AACQ_BUSY].q_max);
  123 }
  124 
  125 /*
  126  * Print the command queue states for controller 0 (callable from DDB)
  127  */
  128 void
  129 aac_printstate0(void)
  130 {
  131         struct aac_softc *sc;
  132 
  133         sc = devclass_get_softc(devclass_find("aac"), 0);
  134 
  135         aac_print_queues(sc);
  136         switch (sc->aac_hwif) {
  137         case AAC_HWIF_I960RX:
  138                 device_printf(sc->aac_dev, "IDBR 0x%08x  IIMR 0x%08x  "
  139                     "IISR 0x%08x\n", AAC_GETREG4(sc, AAC_RX_IDBR),
  140                     AAC_GETREG4(sc, AAC_RX_IIMR), AAC_GETREG4(sc, AAC_RX_IISR));
  141                 device_printf(sc->aac_dev, "ODBR 0x%08x  OIMR 0x%08x  "
  142                     "OISR 0x%08x\n", AAC_GETREG4(sc, AAC_RX_ODBR),
  143                     AAC_GETREG4(sc, AAC_RX_OIMR), AAC_GETREG4(sc, AAC_RX_OISR));
  144                 AAC_SETREG4(sc, AAC_RX_OIMR, 0/*~(AAC_DB_COMMAND_READY |
  145                             AAC_DB_RESPONSE_READY | AAC_DB_PRINTF)*/);
  146                 device_printf(sc->aac_dev, "ODBR 0x%08x  OIMR 0x%08x  "
  147                     "OISR 0x%08x\n", AAC_GETREG4(sc, AAC_RX_ODBR),
  148                     AAC_GETREG4(sc, AAC_RX_OIMR), AAC_GETREG4(sc, AAC_RX_OISR));
  149                 break;
  150         case AAC_HWIF_STRONGARM:
  151                 /* XXX implement */
  152                 break;
  153         }
  154 }
  155 
  156 /*
  157  * simulate an interrupt for controller 0
  158  */
  159 void
  160 aac_intr0(void)
  161 {
  162         struct aac_softc *sc;
  163 
  164         sc = devclass_get_softc(devclass_find("aac"), 0);
  165 
  166         aac_intr(sc);
  167 }
  168 
  169 /*
  170  * Panic in a slightly informative fashion
  171  */
  172 void
  173 aac_panic(struct aac_softc *sc, char *reason)
  174 {
  175         aac_print_queues(sc);
  176         panic(reason);
  177 }
  178 
  179 /*
  180  * Print a FIB
  181  */
  182 void
  183 aac_print_fib(struct aac_softc *sc, struct aac_fib *fib, const char *caller)
  184 {
  185         if (fib == NULL) {
  186                 device_printf(sc->aac_dev,
  187                               "aac_print_fib called with NULL fib\n");
  188                 return;
  189         }
  190         device_printf(sc->aac_dev, "%s: FIB @ %p\n", caller, fib);
  191         device_printf(sc->aac_dev, "  XferState %b\n", fib->Header.XferState,
  192                       "\2"
  193                       "\1HOSTOWNED"
  194                       "\2ADAPTEROWNED"
  195                       "\3INITIALISED"
  196                       "\4EMPTY"
  197                       "\5FROMPOOL"
  198                       "\6FROMHOST"
  199                       "\7FROMADAP"
  200                       "\10REXPECTED"
  201                       "\11RNOTEXPECTED"
  202                       "\12DONEADAP"
  203                       "\13DONEHOST"
  204                       "\14HIGH"
  205                       "\15NORM"
  206                       "\16ASYNC"
  207                       "\17PAGEFILEIO"
  208                       "\20SHUTDOWN"
  209                       "\21LAZYWRITE"
  210                       "\22ADAPMICROFIB"
  211                       "\23BIOSFIB"
  212                       "\24FAST_RESPONSE"
  213                       "\25APIFIB\n");
  214         device_printf(sc->aac_dev, "  Command       %d\n", fib->Header.Command);
  215         device_printf(sc->aac_dev, "  StructType    %d\n",
  216                       fib->Header.StructType);
  217         device_printf(sc->aac_dev, "  Flags         0x%x\n", fib->Header.Flags);
  218         device_printf(sc->aac_dev, "  Size          %d\n", fib->Header.Size);
  219         device_printf(sc->aac_dev, "  SenderSize    %d\n",
  220                       fib->Header.SenderSize);
  221         device_printf(sc->aac_dev, "  SenderAddress 0x%x\n",
  222                       fib->Header.SenderFibAddress);
  223         device_printf(sc->aac_dev, "  RcvrAddress   0x%x\n",
  224                       fib->Header.ReceiverFibAddress);
  225         device_printf(sc->aac_dev, "  SenderData    0x%x\n",
  226                       fib->Header.SenderData);
  227         switch(fib->Header.Command) {
  228         case ContainerCommand:
  229         {
  230                 struct aac_blockread *br;
  231                 struct aac_blockwrite *bw;
  232                 struct aac_sg_table *sg;
  233                 int i;
  234 
  235                 br = (struct aac_blockread*)fib->data;
  236                 bw = (struct aac_blockwrite*)fib->data;
  237                 sg = NULL;
  238 
  239                 if (br->Command == VM_CtBlockRead) {
  240                         device_printf(sc->aac_dev,
  241                                       "  BlockRead: container %d  0x%x/%d\n", 
  242                                       br->ContainerId, br->BlockNumber, 
  243                                       br->ByteCount);
  244                         sg = &br->SgMap;
  245                 }
  246                 if (bw->Command == VM_CtBlockWrite) {
  247                         device_printf(sc->aac_dev,
  248                                       "  BlockWrite: container %d  0x%x/%d "
  249                                       "(%s)\n", bw->ContainerId,
  250                                       bw->BlockNumber, bw->ByteCount, 
  251                                       bw->Stable == CSTABLE ? "stable" :
  252                                       "unstable");
  253                         sg = &bw->SgMap;
  254                 }
  255                 if (sg != NULL) {
  256                         device_printf(sc->aac_dev,
  257                                       "  %d s/g entries\n", sg->SgCount);
  258                         for (i = 0; i < sg->SgCount; i++)
  259                                 device_printf(sc->aac_dev, "  0x%08x/%d\n",
  260                                               sg->SgEntry[i].SgAddress,
  261                                               sg->SgEntry[i].SgByteCount);
  262                 }
  263                 break;
  264         }
  265         default:
  266                 device_printf(sc->aac_dev, "   %16D\n", fib->data, " ");
  267                 device_printf(sc->aac_dev, "   %16D\n", fib->data + 16, " ");
  268                 break;
  269         }
  270 }
  271 
  272 /*
  273  * Describe an AIF we have received.
  274  */
  275 void
  276 aac_print_aif(struct aac_softc *sc, struct aac_aif_command *aif)
  277 {
  278         switch(aif->command) {
  279         case AifCmdEventNotify:
  280                 device_printf(sc->aac_dev, "EventNotify(%d)\n", aif->seqNumber);
  281                 switch(aif->data.EN.type) {
  282                 case AifEnGeneric:              /* Generic notification */
  283                         device_printf(sc->aac_dev, "(Generic) %.*s\n", 
  284                                   (int)sizeof(aif->data.EN.data.EG),
  285                                   aif->data.EN.data.EG.text);
  286                         break;
  287                 case AifEnTaskComplete:         /* Task has completed */
  288                         device_printf(sc->aac_dev, "(TaskComplete)\n");
  289                         break;
  290                 case AifEnConfigChange:         /* Adapter configuration change
  291                                                  * occurred */
  292                         device_printf(sc->aac_dev, "(ConfigChange)\n");
  293                         break;
  294                 case AifEnContainerChange:      /* Adapter specific container
  295                                                  * configuration change */
  296                         device_printf(sc->aac_dev, "(ContainerChange) "
  297                                       "container %d,%d\n", 
  298                                       aif->data.EN.data.ECC.container[0], 
  299                                       aif->data.EN.data.ECC.container[1]);
  300                         break;
  301                 case AifEnDeviceFailure:        /* SCSI device failed */
  302                         device_printf(sc->aac_dev, "(DeviceFailure) "
  303                                       "handle %d\n", 
  304                                       aif->data.EN.data.EDF.deviceHandle);
  305                         break;
  306                 case AifEnMirrorFailover:       /* Mirror failover started */
  307                         device_printf(sc->aac_dev, "(MirrorFailover) "
  308                                       "container %d failed, "
  309                                       "migrating from slice %d to %d\n",
  310                                       aif->data.EN.data.EMF.container, 
  311                                       aif->data.EN.data.EMF.failedSlice, 
  312                                       aif->data.EN.data.EMF.creatingSlice);
  313                         break;
  314                 case AifEnContainerEvent:       /* Significant container
  315                                                  * event */
  316                         device_printf(sc->aac_dev, "(ContainerEvent) "
  317                                       "container %d event "
  318                                       "%d\n", aif->data.EN.data.ECE.container,
  319                                       aif->data.EN.data.ECE.eventType); 
  320                         break;
  321                 case AifEnFileSystemChange:     /* File system changed */
  322                         device_printf(sc->aac_dev, "(FileSystemChange)\n");
  323                         break;
  324                 case AifEnConfigPause:          /* Container pause event */
  325                         device_printf(sc->aac_dev, "(ConfigPause)\n");
  326                         break;
  327                 case AifEnConfigResume:         /* Container resume event */
  328                         device_printf(sc->aac_dev, "(ConfigResume)\n");
  329                         break;
  330                 case AifEnFailoverChange:       /* Failover space assignment
  331                                                  * changed */
  332                         device_printf(sc->aac_dev, "(FailoverChange)\n");
  333                         break;
  334                 case AifEnRAID5RebuildDone:     /* RAID5 rebuild finished */
  335                         device_printf(sc->aac_dev, "(RAID5RebuildDone)\n");
  336                         break;
  337                 case AifEnEnclosureManagement:  /* Enclosure management event */
  338                         device_printf(sc->aac_dev, "(EnclosureManagement) "
  339                                       "EMPID %d unit %d "
  340                                       "event %d\n", aif->data.EN.data.EEE.empID,
  341                                       aif->data.EN.data.EEE.unitID, 
  342                                       aif->data.EN.data.EEE.eventType);
  343                         break;
  344                 case AifEnBatteryEvent:         /* Significant NV battery
  345                                                  * event */
  346                         device_printf(sc->aac_dev, "(BatteryEvent) %d "
  347                                       "(state was %d, is %d\n",
  348                                       aif->data.EN.data.EBE.transition_type,
  349                                       aif->data.EN.data.EBE.current_state,
  350                                       aif->data.EN.data.EBE.prior_state);
  351                         break;
  352                 case AifEnAddContainer:         /* A new container was
  353                                                  * created. */
  354                         device_printf(sc->aac_dev, "(AddContainer)\n");
  355                         break;          
  356                 case AifEnDeleteContainer:      /* A container was deleted. */
  357                         device_printf(sc->aac_dev, "(DeleteContainer)\n");
  358                         break;
  359                 case AifEnBatteryNeedsRecond:   /* The battery needs
  360                                                  * reconditioning */
  361                         device_printf(sc->aac_dev, "(BatteryNeedsRecond)\n");
  362                         break;
  363                 case AifEnClusterEvent:         /* Some cluster event */
  364                         device_printf(sc->aac_dev, "(ClusterEvent) event %d\n", 
  365                                       aif->data.EN.data.ECLE.eventType);
  366                         break;
  367                 case AifEnDiskSetEvent:         /* A disk set event occured. */
  368                         device_printf(sc->aac_dev, "(DiskSetEvent) event %d "
  369                                       "diskset %jd creator %jd\n",
  370                                       aif->data.EN.data.EDS.eventType, 
  371                                       (intmax_t)aif->data.EN.data.EDS.DsNum, 
  372                                       (intmax_t)aif->data.EN.data.EDS.CreatorId);
  373                         break;
  374                 case AifDenMorphComplete:       /* A morph operation
  375                                                  * completed */
  376                         device_printf(sc->aac_dev, "(MorphComplete)\n");
  377                         break;
  378                 case AifDenVolumeExtendComplete: /* A volume expand operation
  379                                                   * completed */
  380                         device_printf(sc->aac_dev, "(VolumeExtendComplete)\n");
  381                         break;
  382                 default:
  383                         device_printf(sc->aac_dev, "(%d)\n", aif->data.EN.type);
  384                         break;
  385                 }
  386                 break;
  387         case AifCmdJobProgress:
  388         {
  389                 char    *status;
  390                 switch(aif->data.PR[0].status) {
  391                 case AifJobStsSuccess:
  392                         status = "success"; break;
  393                 case AifJobStsFinished:
  394                         status = "finished"; break;
  395                 case AifJobStsAborted:
  396                         status = "aborted"; break;
  397                 case AifJobStsFailed:
  398                         status = "failed"; break;
  399                 case AifJobStsSuspended:
  400                         status = "suspended"; break;
  401                 case AifJobStsRunning:
  402                         status = "running"; break;
  403                 default:
  404                         status = "unknown status"; break;
  405                 }               
  406         
  407                 device_printf(sc->aac_dev, "JobProgress (%d) - %s (%d, %d)\n",
  408                               aif->seqNumber, status, 
  409                               aif->data.PR[0].currentTick,
  410                               aif->data.PR[0].finalTick);
  411                 switch(aif->data.PR[0].jd.type) {
  412                 case AifJobScsiZero:            /* SCSI dev clear operation */
  413                         device_printf(sc->aac_dev, "(ScsiZero) handle %d\n",
  414                                       aif->data.PR[0].jd.client.scsi_dh);
  415                         break;
  416                 case AifJobScsiVerify:          /* SCSI device Verify operation
  417                                                  * NO REPAIR */
  418                         device_printf(sc->aac_dev, "(ScsiVerify) handle %d\n",
  419                                       aif->data.PR[0].jd.client.scsi_dh);
  420                         break;
  421                 case AifJobScsiExercise:        /* SCSI device Exercise
  422                                                  * operation */
  423                         device_printf(sc->aac_dev, "(ScsiExercise) handle %d\n",
  424                                       aif->data.PR[0].jd.client.scsi_dh);
  425                         break;
  426                 case AifJobScsiVerifyRepair:    /* SCSI device Verify operation
  427                                                  * WITH repair */
  428                         device_printf(sc->aac_dev,
  429                                       "(ScsiVerifyRepair) handle %d\n",
  430                                       aif->data.PR[0].jd.client.scsi_dh);
  431                         break;
  432                 case AifJobCtrZero:             /* Container clear operation */
  433                         device_printf(sc->aac_dev,
  434                                       "(ContainerZero) container %d\n", 
  435                                       aif->data.PR[0].jd.client.container.src);
  436                         break;
  437                 case AifJobCtrCopy:             /* Container copy operation */
  438                         device_printf(sc->aac_dev,
  439                                       "(ContainerCopy) container %d to %d\n", 
  440                                       aif->data.PR[0].jd.client.container.src,
  441                                       aif->data.PR[0].jd.client.container.dst);
  442                         break;
  443                 case AifJobCtrCreateMirror:     /* Container Create Mirror
  444                                                  * operation */
  445                         device_printf(sc->aac_dev,
  446                                       "(ContainerCreateMirror) container %d\n",
  447                                       aif->data.PR[0].jd.client.container.src);
  448                                       /* XXX two containers? */
  449                         break;
  450                 case AifJobCtrMergeMirror:      /* Container Merge Mirror
  451                                                  * operation */
  452                         device_printf(sc->aac_dev,
  453                                       "(ContainerMergeMirror) container %d\n",
  454                                       aif->data.PR[0].jd.client.container.src);
  455                                       /* XXX two containers? */
  456                         break;
  457                 case AifJobCtrScrubMirror:      /* Container Scrub Mirror
  458                                                  * operation */
  459                         device_printf(sc->aac_dev,
  460                                       "(ContainerScrubMirror) container %d\n",
  461                                       aif->data.PR[0].jd.client.container.src);
  462                         break;
  463                 case AifJobCtrRebuildRaid5:     /* Container Rebuild Raid5
  464                                                  * operation */
  465                         device_printf(sc->aac_dev,
  466                                       "(ContainerRebuildRaid5) container %d\n",
  467                                       aif->data.PR[0].jd.client.container.src);
  468                         break;
  469                 case AifJobCtrScrubRaid5:       /* Container Scrub Raid5
  470                                                  * operation */
  471                         device_printf(sc->aac_dev,
  472                                       "(ContainerScrubRaid5) container %d\n", 
  473                                       aif->data.PR[0].jd.client.container.src);
  474                         break;
  475                 case AifJobCtrMorph:            /* Container morph operation */
  476                         device_printf(sc->aac_dev,
  477                                       "(ContainerMorph) container %d\n", 
  478                                       aif->data.PR[0].jd.client.container.src);
  479                                       /* XXX two containers? */
  480                         break;
  481                 case AifJobCtrPartCopy:         /* Container Partition copy
  482                                                  * operation */
  483                         device_printf(sc->aac_dev,
  484                                       "(ContainerPartCopy) container %d to "
  485                                       "%d\n",
  486                                       aif->data.PR[0].jd.client.container.src,
  487                                       aif->data.PR[0].jd.client.container.dst);
  488                         break;
  489                 case AifJobCtrRebuildMirror:    /* Container Rebuild Mirror
  490                                                  * operation */
  491                         device_printf(sc->aac_dev,
  492                                       "(ContainerRebuildMirror) container " 
  493                                       "%d\n",
  494                                       aif->data.PR[0].jd.client.container.src);
  495                         break;
  496                 case AifJobCtrCrazyCache:       /* crazy cache */
  497                         device_printf(sc->aac_dev,
  498                                       "(ContainerCrazyCache) container %d\n", 
  499                                       aif->data.PR[0].jd.client.container.src);
  500                                       /* XXX two containers? */
  501                         break;
  502                 case AifJobFsCreate:            /* File System Create
  503                                                  * operation */
  504                         device_printf(sc->aac_dev, "(FsCreate)\n");
  505                         break;
  506                 case AifJobFsVerify:            /* File System Verify
  507                                                  * operation */
  508                         device_printf(sc->aac_dev, "(FsVerivy)\n");
  509                         break;
  510                 case AifJobFsExtend:            /* File System Extend
  511                                                  * operation */
  512                         device_printf(sc->aac_dev, "(FsExtend)\n");
  513                         break;
  514                 case AifJobApiFormatNTFS:       /* Format a drive to NTFS */
  515                         device_printf(sc->aac_dev, "(FormatNTFS)\n");
  516                         break;
  517                 case AifJobApiFormatFAT:        /* Format a drive to FAT */
  518                         device_printf(sc->aac_dev, "(FormatFAT)\n");
  519                         break;
  520                 case AifJobApiUpdateSnapshot:   /* update the read/write half
  521                                                  * of a snapshot */
  522                         device_printf(sc->aac_dev, "(UpdateSnapshot)\n");
  523                         break;
  524                 case AifJobApiFormatFAT32:      /* Format a drive to FAT32 */
  525                         device_printf(sc->aac_dev, "(FormatFAT32)\n");
  526                         break;
  527                 case AifJobCtlContinuousCtrVerify: /* Adapter operation */
  528                         device_printf(sc->aac_dev, "(ContinuousCtrVerify)\n");
  529                         break;
  530                 default:
  531                         device_printf(sc->aac_dev, "(%d)\n",
  532                                       aif->data.PR[0].jd.type);
  533                         break;
  534                 }
  535                 break;
  536         }
  537         case AifCmdAPIReport:
  538                 device_printf(sc->aac_dev, "APIReport (%d)\n", aif->seqNumber);
  539                 break;
  540         case AifCmdDriverNotify:
  541                 device_printf(sc->aac_dev, "DriverNotify (%d)\n",
  542                               aif->seqNumber);
  543                 break;
  544         default:
  545                 device_printf(sc->aac_dev, "AIF %d (%d)\n", aif->command,
  546                               aif->seqNumber);
  547                 break;
  548         }
  549 }
  550 #endif /* AAC_DEBUG */

Cache object: 12e09a9e51c7125d749ccbebb47830cf


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.