Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/devices/dev_pic.c

    r3 r1  
    2525#include <hal_special.h>
    2626#include <dev_icu.h>
    27 #include <chdev.h>
     27#include <device.h>
    2828#include <memcpy.h>
    2929#include <printk.h>
     
    3535/////////////////////////////////////////////////////////////////////////////////////////
    3636
    37 extern chdev_directory_t  chdev_dir;         // allocated in kernel_init.c
     37extern devices_directory_t  devices_dir;         // allocated in kernel_init.c
    3838
    39 extern chdev_pic_input_t  chdev_pic_input;   // allocated in kernel_init.c
     39extern devices_input_irq_t  devices_input_irq;   // allocated in kernel_init.c
     40
     41
    4042
    4143///////////////////////////////////
    42 void dev_pic_init( chdev_t * chdev,
    43                    uint32_t  irq_nr )
     44void dev_pic_init( xptr_t   dev_xp,
     45                   uint32_t irq_nr )
    4446{
    45     // set PIC chdev extension field
    46     chdev->ext.pic.irq_nr = irq_nr;
     47    // get PIC device cluster and local pointer
     48    cxy_t      dev_cxy = GET_CXY( dev_xp );
     49    device_t * dev_ptr = (device_t *)GET_PTR( dev_xp );
    4750
    48     // get implementation
    49     uint32_t impl = chdev->impl;
     51    // set PIC device extension field
     52    dev_ptr->ext.pic.irq_nr = irq_nr;
    5053
    51     // call the relevant driver init function
     54    // get implementation index from PIC device descriptor
     55    uint32_t impl = hal_remote_lw( XPTR( dev_cxy , &dev_ptr->impl ) );
     56
     57    // set the "name" field in PIC device descriptor
     58    // and call the relevant driver init function
    5259    if( impl == IMPL_PIC_SOC )
    5360    {
    54         soclib_pic_init( chdev );
     61        memcpy( dev_ptr->name , "PIC_TSR" , 16 );
     62        soclib_pic_init( dev_xp );
    5563    }
    5664    else
    5765    {
    58         assert( false , __FUNCTION__ , "illegal PIC device implementation" );
     66        printk("PANIC in %s: illegal PIC device implementation\n", __FUNCTION__ );
     67        hal_core_sleep();
    5968    }
    6069} // end dev_pic_init()
     
    6675{
    6776    // get extended pointer on WTI mailbox
    68     xptr_t wti_xp = XPTR( cxy , dev_icu_wti_ptr( wti_id ) );
     77    xptr_t wti_xp = dev_icu_wti_xptr( cxy , wti_id );
    6978
    70     // get extended pointer on PIC chdev from directory
    71     xptr_t dev_xp = chdev_dir.pic;
     79    // get extended pointer on PIC device from directory
     80    xptr_t dev_xp = devices_dir.pic;
    7281
    73     // get PIC chdev cluster and local pointer
    74     cxy_t     dev_cxy = GET_CXY( dev_xp );
    75     chdev_t * dev_ptr = (chdev_t *)GET_PTR( dev_xp );
     82    // get PIC device cluster and local pointer
     83    cxy_t      dev_cxy = GET_CXY( dev_xp );
     84    device_t * dev_ptr = (device_t *)GET_PTR( dev_xp );
    7685
    7786    // get implementation index and segment base
     
    8392        soclib_pic_bind_irq( dev_xp , irq_id , wti_xp );
    8493    }
     94    else
     95    {
     96        printk("PANIC in %s: illegal PIC device implementation\n", __FUNCTION__ );
     97        hal_core_sleep();
     98    }
    8599}  // end dev_pic_link_wti()
    86100
     
    88102void dev_pic_unbind_irq( uint32_t irq_id )
    89103{
    90     // get extended pointer on PIC chdev from directory
    91     xptr_t dev_xp = chdev_dir.pic;
     104    // get extended pointer on PIC device from directory
     105    xptr_t dev_xp = devices_dir.pic;
    92106
    93     // get PIC chdev cluster and local pointer
    94     cxy_t     dev_cxy = GET_CXY( dev_xp );
    95     chdev_t * dev_ptr = (chdev_t *)GET_PTR( dev_xp );
     107    // get PIC device cluster and local pointer
     108    cxy_t      dev_cxy = GET_CXY( dev_xp );
     109    device_t * dev_ptr = (device_t *)GET_PTR( dev_xp );
    96110
    97111    // get implementation index
     
    103117        soclib_pic_unbind_irq( dev_xp , irq_id );
    104118    }
     119    else
     120    {
     121        printk("PANIC in %s: illegal PIC device implementation\n", __FUNCTION__ );
     122        hal_core_sleep();
     123    }
     124   
    105125} // end dev_pic_disable_irq()
    106126
Note: See TracChangeset for help on using the changeset viewer.