Cambios necesarios para la conversión de SLIH
Los siguientes cambios necesarios se deben aplicar a todos los SLIH que se están portando al kernel de 64 bits.
- Realización de operaciones de lectura en un dispositivo
Todas las instancias de pdiag_dd_read se tendrán que duplicar con pdiag_dd_read_64 para 64 bits. Cada lugar donde se utiliza pdiag_dd_read para un SLIH de 32 bits, se utilizará un pdiag_dd_read_64 para un SLIH de 64 bits. Esto se llevará a cabo utilizando sentencias de compilador de preprocesador condicional (#ifdef).
A continuación se muestra un ejemplo de cómo puede ser una llamada de lectura de origen común de 32 bits y 64 bits:#ifdef __64BIT_KERNEL rc = pdiag_dd_read_64(pdiagex_handle, IOSHORT16, io_addr, &datas, &flags); #else rc = pdiag_dd_read(pdiagex_handle, IOSHORT16, io_addr, &datas, &flags); #endifNota:- La directiva de compilador __64BIT_KERNEL está definida para compiladores de kernel de 64 bits, por lo que el usuario no tendrá que definirla.
- Caso especial para las lecturas de IOLONG32 , los datos se tienen que desplazar 32 bits justo después de la llamada de función, como por ejemplo,(data = data >> 32;).
- La función pdiag_dd_read_64 sólo se utiliza en el entorno de kernel, por lo tanto, el distintivo intrlev siempre debe establecerse enINTRKMEM.
- Realización de operaciones de grabación en un dispositivo
Todas las instancias de pdiag_dd_write deben duplicarse con pdiag_dd_write_64 para 64 bits. Cada lugar donde se utiliza pdiag_dd_write para un SLIH de 32 bits, se utilizará un pdiag_dd_write_64 para un SLIH de 64 bits. Esto se llevará a cabo utilizando sentencias de compilador de preprocesador condicional (#ifdef).
A continuación se muestra un ejemplo de cómo podría ser una llamada de escritura de origen común de 32 bits y 64 bits:#ifdef __64BIT_KERNEL rc = pdiag_dd_write_64(pdiagex_handle, IOLONG32, io_addr, &datal, &flags); #else rc = pdiag_dd_write(pdiagex_handle, IOLONG32, io_addr, &datal, &flags); #endifNota:- La directiva de compilador __64BIT_KERNEL está definida para compiladores de kernel de 64 bits, por lo que el usuario no tendrá que definirla.
- La función pdiag_dd_read_64 sólo se utiliza en el entorno de kernel, por lo tanto, el distintivo intrlev siempre debe establecerse enINTRKMEM.
- Prototipo de función SLIH
El prototipo de función SLIH requiere un cambio en la declaración de tipo para * sleep_word y sleep_flag como se indica a continuación:
int your_interrupt(pdiag_info_handle_t pdiagex_handle, char *data_area, int *interrupt_flag, #ifdef __64BIT_KERNEL long sleep_flag, long *sleep_word) #else int sleep_flag, int *sleep_word) #endif