Annotation of driverkit/notes/IODisk_talk, revision 1.1

1.1     ! root        1:                        notes for IODisk presentation
        !             2:                        
        !             3: IODevAndIdInfo usage
        !             4: 
        !             5: * Declared in disk driver's kernel glue layer
        !             6: * Fields:
        !             7:   * rawDev, blockDev:
        !             8:     * init'd:
        !             9:       * in dev-specific routine in kernel glue layer (e.g., 
        !            10:         sd_init_idmap(), called from SCSIDisk's +initialize)
        !            11:     * Used: 
        !            12:       * for volCheck communication (needed for insertion/automount)
        !            13:   
        !            14:   * id's 
        !            15:     * init'd: 
        !            16:       * in -registerUnixDisk (in mk/driverkit/kernselDiskMethods,
        !            17:        called from IODiskPartition +probe, for both physical disk and all
        !            18:        valid IODiskPartition instances). 
        !            19:     * Used:
        !            20:       * in kernel glue layer, to convert dev_t to id
        !            21:   
        !            22: * IODisk instances have pointer to associated IODevAndIdInfo. 
        !            23:   * init'd by -setDevAndIdInfo
        !            24:     * in dev-specific +probe for physical disks
        !            25:     * in -connectToPhysicalDisk for all logical disks (it's set to phys
        !            26:       disk's IODevAndIdInfo)
        !            27:       
        !            28:   * used: 
        !            29:     * connectToPhysicalDisk, to get physicalDisk's struct
        !            30:     * {register,unregister}UnixDisk
        !            31:     * Calls from IODisk to volCheckRegister()
        !            32:     
        !            33: * Protocols to be implemented by disk drivers
        !            34: 
        !            35:   @protocol IODiskReadingAndWriting
        !            36:   
        !            37:   - (IOReturn) readAt          : (unsigned)offset 
        !            38:                                  length : (unsigned)length 
        !            39:                                  buffer : (unsigned char *)buffer
        !            40:                                  actualLength : (unsigned *)actualLength 
        !            41:                                  client : (vm_task_t)client;
        !            42: 
        !            43:   - (IOReturn) readAsyncAt     : (unsigned)offset 
        !            44:                                  length : (unsigned)length 
        !            45:                                  buffer : (unsigned char *)buffer
        !            46:                                  pending : (void *)pending
        !            47:                                  client : (vm_task_t)client;
        !            48:                
        !            49:   - (IOReturn) writeAt         : (unsigned)offset 
        !            50:                                  length : (unsigned)length 
        !            51:                                  buffer : (unsigned char *)buffer
        !            52:                                  actualLength : (unsigned *)actualLength 
        !            53:                                  client : (vm_task_t)client;
        !            54:                  
        !            55:   - (IOReturn) writeAsyncAt    : (unsigned)offset 
        !            56:                                  length : (unsigned)length 
        !            57:                                  buffer : (unsigned char *)buffer
        !            58:                                  pending : (void *)pending
        !            59:                                  client : (vm_task_t)client;
        !            60:   @end
        !            61:   
        !            62:   @protocol IOPhysicalDiskMethods
        !            63: 
        !            64:   /* called when volCheck or IODiskPartition knows that something
        !            65:      has changed which driver should be aware of.
        !            66:      e.g.: setFormatted, disk insertion detect, transition to ready. */
        !            67:      
        !            68:   - (IOReturn)updatePhysicalParameters;
        !            69:   
        !            70:   /* called by volCheck per user input on insert request panel */
        !            71:   
        !            72:   - (void)abortRequest;
        !            73:   
        !            74:   /* called by volCheck when transition to ready is detected. Wakes up 
        !            75:      I/O threads which are waiting for disk. */
        !            76:      
        !            77:   - (void)diskBecameReady;
        !            78:   
        !            79:   /* ensures disk is present/ready, with alert panel if necessary. Called
        !            80:     by clients before doing r/w. */
        !            81:     
        !            82:   - (IOReturn)isDiskReady      : (BOOL)prompt;
        !            83:   
        !            84:   - (IOReturn) ejectPhysical;  
        !            85:   
        !            86:   /* Used by volCheck (mostly) and at probe time by IODiskPartition. */
        !            87:   - (IODiskReadyState)updateReadyState;
        !            88: 
        !            89:   @end
        !            90: 
        !            91: .........................................
        !            92: 
        !            93: Outline:
        !            94: 
        !            95: 1. Intro
        !            96:    -- class hierarchy - draw it
        !            97:    -- leaf classes just know how to read, write, eject, sense status
        !            98:    -- IODiskPartition takes care of disk labels, partitions
        !            99:    -- volCheck module takes care of polling for ready and panel requests
        !           100:    
        !           101: 2. volCheck module functions: 
        !           102:    -- insertion detection
        !           103:    -- alert panels
        !           104:    -- abort notification
        !           105:    
        !           106:    Discuss briefly the IPC between vol and WS. 
        !           107:    
        !           108: 3. IODiskReadingAndWriting protocol
        !           109:    -- briefly mention 'pending', more to come...
        !           110:    
        !           111: 4. IOPhysicalDiskMethods protocol
        !           112: 
        !           113: 5. kernel glue layer
        !           114: 
        !           115:    Start with IODevAndIdInfo. 
        !           116:    
        !           117: 6. I/O thread architecture, incl. I/O queues
        !           118: 
        !           119: 7. Q&A

unix.superglobalmegacorp.com

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