Annotation of XNU/iokit/IOKit/firewire/IOFireWirePriv.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * Copyright (c) 1999 Apple Computer, Inc.  All rights reserved.
                     24:  *
                     25:  * HISTORY
                     26:  *
                     27:  */
                     28: 
                     29: #ifndef __IOFIREWIREPRIV__
                     30: #define __IOFIREWIREPRIV__
                     31: 
                     32: ////////////////////////////////////////////////////////////////////////////////
                     33: //
                     34: // Private FireWire defs.
                     35: //
                     36: 
                     37: ////////////////////////////////////////////////////////////////////////////////
                     38: //
                     39: // CSR ROM defs.
                     40: //
                     41: 
                     42: // Apple specific key values.
                     43: 
                     44: enum
                     45: {
                     46:        kCSRGenerationKey                       = 0x38,
                     47:        kCSRInvalidKey                          = 0x39
                     48: };
                     49: 
                     50: // Defs for local CSR ROM tree entries.
                     51: 
                     52: struct CSRROMEntryDataStruct
                     53: {
                     54:        struct CSRROMEntryDataStruct    // Links to related entries.
                     55:                                *pParentCSRROMEntryData,
                     56:                                *pPrevCSRROMEntryData,
                     57:                                *pNextCSRROMEntryData;
                     58:        UInt32                  entryType;                      // Type of entry.
                     59: };
                     60: typedef struct CSRROMEntryDataStruct
                     61:                                CSRROMEntryData,
                     62:                                *CSRROMEntryDataPtr;
                     63: 
                     64: struct CSRROMBasicEntryDataStruct
                     65: {
                     66:        UInt32  keyValue;                               // Key value of this entry.
                     67: };
                     68: typedef struct CSRROMBasicEntryDataStruct
                     69:                                CSRROMBasicEntryData,
                     70:                                *CSRROMBasicEntryDataPtr;
                     71: 
                     72: struct CSRROMImmediateDataStruct
                     73: {
                     74:        CSRROMEntryData         csrROMEntryData;                // Data common to all CSR ROM entries.
                     75:        CSRROMBasicEntryData    csrROMBasicEntryData;   // Data common to all basic entries.
                     76:        UInt32                  immediateData;                  // Data for this entry (only 24-bits worth).
                     77: };
                     78: typedef struct CSRROMImmediateDataStruct
                     79:                                CSRROMImmediateData,
                     80:                                *CSRROMImmediateDataPtr;
                     81: 
                     82: struct CSRROMOffsetDataStruct
                     83: {
                     84:        CSRROMEntryData         csrROMEntryData;        // Data common to all CSR ROM entries.
                     85:        CSRROMBasicEntryData    csrROMBasicEntryData;   // Data common to all basic entries.
                     86:        UInt32                  address;                // Lower 32-bits of address of offset entry.
                     87: };
                     88: typedef struct CSRROMOffsetDataStruct
                     89:                                CSRROMOffsetData,
                     90:                                *CSRROMOffsetDataPtr;
                     91: 
                     92: struct CSRROMLeafDataStruct
                     93: {
                     94:        CSRROMEntryData         csrROMEntryData;        // Data common to all CSR ROM entries.
                     95:        CSRROMBasicEntryData    csrROMBasicEntryData;   // Data common to all basic entries.
                     96:        UInt8 *                 leafData;               // Data for this leaf.
                     97:        UInt32                  leafDataSize;           // Size of above data.
                     98: };
                     99: typedef struct CSRROMLeafDataStruct
                    100:                                CSRROMLeafData,
                    101:                                *CSRROMLeafDataPtr;
                    102: 
                    103: struct CSRROMDirectoryDataStruct
                    104: {
                    105:        CSRROMEntryData         csrROMEntryData;        // Data common to all CSR ROM entries.
                    106:        CSRROMBasicEntryData    csrROMBasicEntryData;   // Data common to all basic entries.
                    107:        CSRROMEntryDataPtr      pChildCSRROMEntryData;  // Pointer to first child.
                    108:        UInt32                  numChildren;            // Number of children in this directory.
                    109: };
                    110: typedef struct CSRROMDirectoryDataStruct
                    111:                                CSRROMDirectoryData,
                    112:                                *CSRROMDirectoryDataPtr;
                    113: 
                    114: 
                    115: // Defs for CSR ROM entry IDs.
                    116: 
                    117: enum
                    118: {
                    119:        kInvalidCSRROMEntryIDType       = 0,
                    120:        kLocalCSRROMEntryIDType         = 1,
                    121:        kRemoteCSRROMEntryIDType        = 2
                    122: };
                    123: enum
                    124: {
                    125:        kCSRROMPathBlockSize    = 10
                    126: };
                    127: 
                    128: 
                    129: struct CSRROMEntryIDDataStruct
                    130: {
                    131:        UInt32                                          entryType;                              // Type of entry ID.
                    132: };
                    133: typedef struct CSRROMEntryIDDataStruct
                    134:                                                                CSRROMEntryIDData,
                    135:                                                                *CSRROMEntryIDDataPtr;
                    136: 
                    137: struct CSRROMLocalIDDataStruct
                    138: {
                    139:        CSRROMEntryIDData                       csrROMEntryIDData;              // Data common to all CSR ROM entry IDs.
                    140:        CSRROMEntryDataPtr                      pCSRROMEntryData;               // Pointer to local entry data.
                    141: };
                    142: typedef struct CSRROMLocalIDDataStruct
                    143:                                                                CSRROMLocalIDData,
                    144:                                                                *CSRROMLocalIDDataPtr;
                    145: 
                    146: struct CSRROMRemoteIDDataStruct
                    147: {
                    148:        CSRROMEntryIDData       csrROMEntryIDData;      // Data common to all CSR ROM entry IDs.
                    149:        const UInt32 *          data;                   // pointer to ROM.
                    150:        UInt32                  physicalPath[kCSRROMPathBlockSize];
                    151:        UInt32                  pathSize;               // Size of above paths.
                    152: };
                    153: typedef struct CSRROMRemoteIDDataStruct
                    154:                                        CSRROMRemoteIDData,
                    155:                                        *CSRROMRemoteIDDataPtr;
                    156: 
                    157: 
                    158: ////////////////////////////////////////////////////////////////////////////////
                    159: //
                    160: // CSR ROM search defs.
                    161: //
                    162: 
                    163: struct CSRROMDirectoryEntry
                    164: {
                    165:        UInt32                  entryAddress;
                    166:        UInt32                  directoryAddress;
                    167:        UInt32                  directorySize;
                    168: };
                    169: typedef struct CSRROMDirectoryEntry
                    170:                                CSRROMDirectoryEntry,
                    171:                                *CSRROMDirectoryEntryPtr;
                    172: 
                    173: struct CSRROMEntryIteratorRecStruct
                    174: {
                    175:        const UInt32 *          data;
                    176:        UInt32                  logicalPath[kCSRROMPathBlockSize];
                    177:        UInt32                  physicalPath[kCSRROMPathBlockSize];
                    178:        UInt32                  pathSize;
                    179:        CSRROMIterationOp       relationship;
                    180:        bool                    reset;
                    181: };
                    182: typedef struct CSRROMEntryIteratorRecStruct
                    183:                                        CSRROMEntryIteratorRec,
                    184:                                        *CSRROMEntryIteratorRecPtr;
                    185: 
                    186: 
                    187: #if 0
                    188: ////////////////////////////////////////////////////////////////////////////////
                    189: // PCR defs
                    190:  
                    191: enum
                    192: {
                    193:        kFWPCRCount                     = 31,
                    194:        kFWPCRSpaceSize         = 0xFF,
                    195:        kFWInputPCROffset       = 0x80,
                    196:        kFWPCRBase                      = 0x0900,
                    197: 
                    198: 
                    199:        kFWPCRAllocated         = 1
                    200: };
                    201: 
                    202: typedef struct
                    203: {
                    204:        FWAddressSpaceID                addressSpace;
                    205:        UInt32                                  *buffer;
                    206:        UInt32                                  oPCRFlags[kFWPCRCount];
                    207:        UInt32                                  iPCRFlags[kFWPCRCount];
                    208: } FWPCRSpaceData, *FWPCRSpaceDataPtr;
                    209: 
                    210: #endif
                    211: 
                    212: struct FWIRMRegistersStruct
                    213: {
                    214:     UInt32             busManagerID;
                    215:     UInt32             bandwidthAvailable;
                    216:     UInt32             channelsAvailableHi;
                    217:     UInt32             channelsAvailableLo;
                    218: };
                    219: typedef struct FWIRMRegistersStruct FWIRMRegisters, *FWIRMRegistersPtr;
                    220: 
                    221: #if 0
                    222: struct FWIMDataStruct
                    223: {
                    224:        FWReferenceData                         fwReferenceData;                // Reference data.
                    225:        struct FWIMDataStruct           *pPrevFWIMData;                 // Link to previous FWIM data record.
                    226:        struct FWIMDataStruct           *pNextFWIMData;                 // Link to next FWIM data record.
                    227:        FWIMID                                          fwimID;                                 // Our ID for the FWIM.
                    228:        FWIMPluginDispatchTablePtr      pFWIMPluginDispatchTable;       // FWIM disaptch table (maybe dummy).
                    229:        FWIMPluginDispatchTablePtr      pRealFWIMPluginDispatchTable;   // Real FWIM disaptch table.
                    230:        RegEntryID                                      fwimRegistryID;                 // Name registry ID of FireWire bus device.
                    231:        RegEntryID                                      baseRegistryID;                 // ID to hang devices off of.
                    232: 
                    233:        QHdrPtr                                         fwimCommandQueue;               // Queue for commands to FWIM.
                    234:        QHdrPtr                                         fwimPriorityCommandQueue;       // Queue for commands to FWIM.
                    235:        QHdrPtr                                         fwimResponseCommandQueue;       // Queue for response commands to FWIM.
                    236:        QHdrPtr                                         fwCommandQueue;                 // Queue for commands from FireWire services.
                    237:        SInt32                                          fwCommandSIHQueued;             // Number of SIH's we have queued for the FW command queue.
                    238:        SInt32                                          fwimCommandSIHQueued;   // Number of SIH's we have queued for the FWIM command queue.
                    239: 
                    240:        struct FWAddressHeapDataStruct
                    241:                                                                fwAddressHeapData;              // Address heap.
                    242: 
                    243:        struct FWDeviceDataStruct       *fwDeviceDataList;              // Pointer to list of data for all devices
                    244:                                                                                                                // controlled by this FWIM.
                    245:        struct FWUnitDataStruct         *fwUnitDataList;                // Pointer to list of data for all units
                    246:                                                                                                                // controlled by this FWIM.
                    247:        struct FWClientDataStruct       *fwClientDataList;              // Pointer to list of data for all clients
                    248:                                                                                                                // controlled by this FWIM.
                    249:        struct FWDriverDataStruct       *fwDriverDataList;              // Pointer to list of data for all drivers
                    250:                                                                                                                // controlled by this FWIM.
                    251:        struct FWVDeviceDataStruct      *fwVDeviceDataList;             // Pointer to lisf of data for all virtual devices
                    252:                                                                                                                // controlled by this FWIM.
                    253:        struct FWPDriverDataStruct      *fwPDriverDataList;             // Pointer to list of data for all protocol drivers
                    254:                                                                                                                // controlled by this FWIM.
                    255: 
                    256:        FWTopologyMapPtr                        pFWTopologyMap;                 // FireWire bus topology map.
                    257:        UInt32                                          localNodeID;                    // Local node ID of host adapter.
                    258:        FWSpeedMapPtr                           pFWSpeedMap;                    // FireWire speed map.
                    259:        bool                                            validFWTopologyMapTimerSIHQueued;       // True if we've queued an SIH to start the valid topology map
                    260:                                                                                                                                        // timeout timer.
                    261:        bool                                            validFWTopologyMapTimeoutResetCommandObjectIDInUse;     // True if above command object is in use.
                    262:        bool                                            dialogInUse;                            // True if the dialog is already on screen
                    263:        bool                                            needDSAT;                                       // True if we need to put up the dialog
                    264: 
                    265:        TimerID                                         validFWTopologyMapTimer;        // Timer for receiving a valid topology map.
                    266:        SInt32                                          validFWTopologyMapTimersSet;    // Number of above timers that have been set.
                    267:        FWCommandObjectID                       validFWTopologyMapTimeoutResetCommandObjectID;  // Command object for initiating a bus reset after
                    268:                                                                                                                                                                // a valid topology map timeout.
                    269: 
                    270:        FWDeviceID                                      localFWDeviceID;                // Reference to local FireWire device.
                    271: 
                    272:        FWCommandObjectID                       resetCommandObjectID;   // Command object for resetting bus.
                    273: 
                    274:        UInt8 *                                                 configurationROM;               // Storage for configuration ROM.
                    275:        CSRROMDirectoryData                     csrROMRootDirectory;    // Local CSR ROM root directory.
                    276:        UInt32                                          csrROMUpdateInProgress; // Non-zero indicates CSR ROM being revised
                    277: 
                    278:        struct FWDeviceDataStruct       *fwDeviceDataAllocation;        // Pre-allocated block of device data record.
                    279:        struct FWDeviceDataStruct       *fwDeviceDataPool;              // Pool of pre-allocated device data records.
                    280: 
                    281:        FWIsochResourceManagerID        fwIsochResourceManagerID;       // Reference to isochronous resource manager for this FWIM.
                    282:        struct FWIsochResourceManagerDataStruct
                    283:                                                                *pFWIsochResourceManagerData;   // Allocated data for isochronous resource manager.
                    284:        FWIRMRegisters                          fwIRMRegisters;                 // FireWire isochronous resource manager registers.
                    285:        FWCommandObjectID                       busManagementAsynchCommandObjectID;     // Command object used for bus management.
                    286:        struct IsochChannelDataStruct
                    287:                                                                *isochChannelDataList;  // List of isochronous channels operating on this FWIM.
                    288: 
                    289:        UInt32                                          csrCoreState;                   // Value of core CSR state register.
                    290:        FWIMCommandResources            cmstrFWIMCommandResources;      // FWIM command resources for executing cmstr state bit.
                    291:        FWIMCommandParams                       cmstrFWIMCommandParams; // FWIM command params for executing cmstr state bit.
                    292:        UInt32                                          cmstrFWIMCommandParamsInUse;    // Lock for cmstrFWIMCommandParams.
                    293: 
                    294:        FWCommandObjectID                       fwDeviceScanAsynchCommandObjectID;      // Command object for doing device scanning.
                    295:        UInt32                                          fwDeviceScanAsynchCommandObjectIDInUse; // Lock for command object for doing device scanning.
                    296:        CSRNodeUniqueID                         deviceScanUniqueID;             // Storage for unique ID for device scan.
                    297:        UInt32                                          deviceScanFiller;               //zzz really need a better way to get CSR ROM generation.
                    298:        UInt32                                          deviceScanCSRROMGeneration;     // Storage for CSR ROM generation for device scan.//zzz must come afterdeviceScanUniqueID
                    299:        UInt32                                          *pCurrentSelfID;                // Pointer to current self ID in device scan.
                    300:        UInt32                                          nextNodeNum;                    // Next node num in device scan.
                    301: 
                    302:        FWClientCommandResources        resetNotifyFWClientCommandResources;    // Resources for notifying clients of bus restes.
                    303:        FWClientInterfaceParams         resetNotifyFWClientInterfaceParams;     // Interface params for notifying clients of bus resets.
                    304:        UInt32                                          resetNotifyFWClientInterfaceParamsInUse;        // Lock for resetNotifyFWClientInterfaceParams.
                    305: 
                    306:        FWClientCommandResources        busManagementNotifyFWClientCommandResources;    // Resources for notifying clients of bus
                    307:                                                                                                                                                                // resets when bus management has been established.
                    308:        FWClientInterfaceParams         busManagementNotifyFWClientInterfaceParams;     // Interface params for notifying clients of bus
                    309:                                                                                                                                                        // resets when bus management has been established.
                    310:        UInt32                                          busManagementNotifyFWClientInterfaceParamsInUse;        // Lock for busManagementNotifyFWClientInterfaceParams.
                    311: 
                    312:        QHdrPtr                                         fwimProcessQueue;               // Queue for request processing.
                    313:        SInt32                                          fwimProcessSIHQueued;   // Number of SIH's we have queued for the FWIM process queue.
                    314:        FWIMProcessResourcesPtr         fwimProcessResourcesPool;       // Pool of resources for processing requests.
                    315:        QHdrPtr                                         fwimProcessResourcesInactive;   // List of inactive resources for processing requests.
                    316: 
                    317:        SoftwareInterruptID                     processBusResetSWIntID; // Software interrupt ID for processing bus resets.
                    318: 
                    319:        FWIMProcessAsynchParams         fwimProcessLocalAsynchParams;   // Params for processing local asynch requests.
                    320:        FWPCRSpaceData                          pcrSpaceData;
                    321:        FWAddressSpaceID                        csrAddressSpaceID;              // Address space ID for Config ROM
                    322:        FWAddressSpaceID                        irmAddressSpaceID;              // ... For Isoch Resource Manager registers
                    323:        FWAddressSpaceID                        coreCSRStateAddressSpaceID;     // ... For core CSR state variablers
                    324:        FWAddressSpaceID                        fcpAddressSpaceID;              // ... For FCP registers
                    325: 
                    326:        UInt32                                          fwimFeatures;                   // Store feature flags provided by FWIM
                    327:        UInt32                                          fwimCSRROMMapLength;    // ... also provided by FWIM
                    328:        UInt32                                          fwimDeciWatts;                  // Deciwatts provided by hardware
                    329:        UInt32                                          fwimDeciVoltsMinimum;   // Minimum decivolts at above load
                    330:        UInt32                                          fwimDeciVoltsMaximum;   // Maximum decivolts at no load
                    331: 
                    332:        UInt32                                          deciWattsAvailable;             // How much local power is not being used
                    333: 
                    334:        FWAddressSpaceDataPtr           fwPhysicalAddressSpaceDataList; // List of Physical allocations
                    335: 
                    336:        QHdrPtr                                         fwDialogQueue;                  // Queue of "Hey put that back!" requests.
                    337:        DeferredTask                            dialogDT;                               // Stupid Secondary Interrupts dont' always do what
                    338:                                                                                                                // you want (see FWUIServices.c for gory details)
                    339: 
                    340:        UInt32                                          lastLocalSelfIDQuads[16];       // Last local self ID's we saw
                    341:        UInt32                                          lastLocalSelfIDSize;    // Last size returned (should never change)
                    342: 
                    343:        UInt8                                           retryOnAckDataErrorNodeIDs[64];
                    344: 
                    345:        UInt32                                          fwimSpecificData;               // Data specific to FWIM.
                    346: };
                    347: typedef struct FWIMDataStruct  FWIMData, *FWIMDataPtr;
                    348: 
                    349: 
                    350: 
                    351: ////////////////////////////////////////////////////////////////////////////////
                    352: //
                    353: // FireWire device defs.
                    354: //
                    355: 
                    356: struct FWDeviceDataStruct
                    357: {
                    358:        FWReferenceData                         fwReferenceData;                // Reference data.
                    359: 
                    360:        struct FWDeviceDataStruct       *pPrevFWDeviceData;             // Link to previous FireWire device data record
                    361:        struct FWDeviceDataStruct       *pNextFWDeviceData;             // Link to next FireWire device data record
                    362: 
                    363:        FWIMID                                          fwimID;                                 // ID of our FWIM.
                    364: 
                    365:        UInt16                                          processingCommand;                      
                    366:        UInt16                                          nextCommand;                    // command and pending command fields
                    367: 
                    368:        bool                                            newDevice;                              // True if this device was just created.
                    369:        bool                                            scanningDevice;                 // True if we're still scanning for device.
                    370:        bool                                            deviceConnected;                // True if device is connected.
                    371:        bool                                            driverRequestedReplug;  // True if we need the "Hey put that back dialog"
                    372: 
                    373: // zzz Need to go through all these structures to make sure everything is aligned right. Why
                    374: // make life difficult for the poor �P?
                    375: 
                    376:        UInt32                                          numConnections;                 // Number of connections to this device.
                    377: 
                    378:        UInt32                                          nodeID;                                 // Node ID for this device.
                    379:        UInt32                                          selfIDs[8];                             // Self IDs sent by this device.
                    380:        UInt32                                          numSelfIDs;                             // Number of self IDs above.
                    381:        UInt32                                          csrROMGeneration;               // Generation number of CSR ROM.
                    382:        CSRNodeUniqueID                         uniqueID;                               // ID unique to this device.
                    383: 
                    384:        UInt32                                          maxPayloadSize;                 // Maximum payload size to use for device's bus transactions.
                    385: 
                    386:        RegEntryID                                      fwDeviceRegistryID;             // Name registry ID of FireWire device.
                    387: 
                    388:        UInt32                                          minimumDeciVolts;               // Minimum volts to operate device
                    389:        UInt32                                          totalDeciWattsAllocated;// Total power previously allocated to device
                    390:        UInt32                                          totalDeciWattsRequested;// Notify device if this becomes available
                    391:        UInt32                                          powerFlags;                             // Flags for power behavior
                    392: 
                    393:        bool                                            retryOnAckDataErr;              // Violate 1394-1995 and just send the packet again
                    394: };
                    395: typedef struct FWDeviceDataStruct
                    396:                                                                FWDeviceData,
                    397:                                                                *FWDeviceDataPtr;
                    398: 
                    399: 
                    400: ////////////////////////////////////////////////////////////////////////////////
                    401: //
                    402: // FireWire unit defs.
                    403: //
                    404: 
                    405: struct FWUnitDataStruct
                    406: {
                    407:        FWReferenceData                         fwReferenceData;                // Reference data.
                    408: 
                    409:        struct FWUnitDataStruct         *pPrevFWUnitData;               // Link to previous FireWire unit data record
                    410:        struct FWUnitDataStruct         *pNextFWUnitData;               // Link to next FireWire unit data record
                    411: 
                    412:        FWDeviceID                                      fwDeviceID;                             // ID of device this unit belongs to.
                    413:        CSRROMEntryID                           csrUnitID;                              // CSR ROM entry ID of FireWire unit directory.
                    414:        UInt32                                          specID;                                 // Spec ID for this unit.
                    415:        UInt32                                          swVersion;                              // Software version for this unit.
                    416:        RegEntryID                                      unitRegEntryID;                 // Name registry ID of FireWire unit.
                    417:        UInt32                                          numConnections;                 // Number of connections to unit.
                    418: 
                    419:        bool                                            newUnit;                                // True if this unit was just created.
                    420:        bool                                            unitAdded;                              // True if this unit was just added.
                    421:        bool                                            unitConnected;                  // True if unit is connected.
                    422: };
                    423: typedef struct FWUnitDataStruct        FWUnitData,
                    424:                                                                *FWUnitDataPtr;
                    425: 
                    426: #endif
                    427: 
                    428: ////////////////////////////////////////////////////////////////////////////////
                    429: //
                    430: // Private FireWire Services procedure defs.
                    431: //
                    432: 
                    433: UInt16 FWComputeCRC16 (UInt32 *pQuads, UInt32 numQuads);
                    434: 
                    435: CSRROMEntryID  FWCSRROMCreateEntryID(void);
                    436: void  FWCSRROMInvalidateEntryIDType(CSRROMEntryID csrROMEntryID);
                    437: void  FWCSRROMDisposeEntryID(CSRROMEntryID csrROMEntryID);
                    438: 
                    439: #endif /* __IOFIREWIREPRIV__ */
                    440: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.