#!/usr/sbin/dtrace -Fs

struct dev_info
{
    void *devi_parent;
    void *devi_child;
    void *devi_sibling;
    char *devi_binding_name;
    char *devi_addr;
    int	devi_nodeid;
    int	devi_instance;
    void *devi_ops;
    void *devi_parent_data;
    void *devi_driver_data;
    void *devi_drv_prop_ptr;
    void *devi_sys_prop_ptr;
    void *devi_minor;
    void *devi_next;
    void *devi_lock;
    struct dev_info *devi_bus_map_fault;
    struct dev_info *devi_bus_dma_map;
    struct dev_info *devi_bus_dma_allochdl;
    struct dev_info *devi_bus_dma_freehdl;
    struct dev_info *devi_bus_dma_bindhdl;
    struct dev_info *devi_bus_dma_unbindhdl;
    struct dev_info *devi_bus_dma_flush;
    struct dev_info *devi_bus_dma_win;
    struct dev_info *devi_bus_dma_ctl;
    struct dev_info *devi_bus_ctl;

    void *devi_hw_prop_ptr;

    char *devi_node_name;
    char *devi_compat_names;
    unsigned long devi_compat_length;
    void *devi_bus_dma_bindfunc;
    void *devi_bus_dma_unbindfund;

    char *devi_devid_str;

    void *devi_pm_info;
    unsigned int devi_pm_flags;
    int devi_pm_num_components;
    unsigned long devi_pm_comp_size;
    void *devi_pm_components;
    struct dev_info *devi_pm_ppm;
    void *devi_pm_ppm_private;
    int devi_pm_dev_thread;
    unsigned int devi_pm_kidsupcnt;
    void *devi_pm_scan;
    unsigned int devi_pm_noinvolvpm;
    unsigned int devi_pm_volpmd;
    void *devi_pm_lock;
    void *devi_pm_busy_lock;
    unsigned int devi_state;
    unsigned short devi_cv;
    int devi_ref;

    void *devi_dacf_tasks;

    int devi_node_class;
    int devi_node_attributes;

    char *devi_device_class;

    int devi_mdi_component;
    void *devi_mdi_client;
    void *devi_mdi_xhci;

    void *devi_global_prop_list;
    unsigned long devi_major;
    int devi_node_state;

    unsigned int devi_flags;

    int devi_circular;

    void *devi_busy_thread;
    void *devi_taskq;

    void *devi_audit;

    void *devi_fmhdl;

    unsigned int devi_cpr_flags;

    void *devi_intr_p;

    void *devi_nex_pm;

    char *devi_addr_buf;

    char *devi_rebinding_name;
};

fbt:pcie_pci::
{
    printf( "pcie_pci:%s", probefunc );
}

fbt:pcie_pci:pepb_attach:entry
{
    printf( "flags: %x, ", ( ( struct dev_info * ) arg0 )->devi_flags );
    printf( "major: %d, ", ( ( struct dev_info * ) arg0 )->devi_major );
    printf( "node_state: %d, ", ( ( struct dev_info * ) arg0 )->devi_node_state );
    printf( "node_name: %s, ", stringof( ( ( struct dev_info * ) arg0 )->devi_node_name ) );
/*
    printf( "devid_str: %s, ", stringof( ( ( struct dev_info * ) arg0 )->devi_devid_str ) );
*/
    printf( "binding_name: %s", stringof( ( ( struct dev_info * ) arg0 )->devi_binding_name ) );

}

fbt::pepb_check_slot_disabled:return
{
    printf( "pepb_check_slot_disabled: return %d", arg1 );
}
