示例#1
0
static void intr_clear_all(nasid_t nasid)
{
	REMOTE_HUB_S(nasid, PI_INT_MASK0_A, 0);
	REMOTE_HUB_S(nasid, PI_INT_MASK0_B, 0);
	REMOTE_HUB_S(nasid, PI_INT_MASK1_A, 0);
	REMOTE_HUB_S(nasid, PI_INT_MASK1_B, 0);
	intr_clear_bits(nasid, REMOTE_HUB_ADDR(nasid, PI_INT_PEND0),
	                INT_PEND0_BASELVL);
	intr_clear_bits(nasid, REMOTE_HUB_ADDR(nasid, PI_INT_PEND1),
	                INT_PEND1_BASELVL);
}
示例#2
0
文件: hubspc.c 项目: nhanh0/hah
/*ARGSUSED*/
int
cpuprom_map(devfs_handle_t dev, vhandl_t *vt, off_t addr, size_t len)
{
    int 		errcode;
    caddr_t 	kvaddr;
    devfs_handle_t		node;
    cnodeid_t 	cnode;

    node = prominfo_nodeget(dev);

    if (!node)
        return EIO;


    kvaddr = hubdev_prombase_get(node);
    cnode  = hubdev_cnodeid_get(node);
#ifdef	HUBSPC_DEBUG
    printf("cpuprom_map: hubnode %d kvaddr 0x%x\n", node, kvaddr);
#endif

    if (len > RBOOT_SIZE)
        len = RBOOT_SIZE;
    /*
     * Map in the prom space
     */
    errcode = v_mapphys(vt, kvaddr, len);

    if (errcode == 0 ) {
        /*
         * Set the MD configuration registers suitably.
         */
        nasid_t		nasid;
        uint64_t	value;
        volatile hubreg_t	*regaddr;

        nasid = COMPACT_TO_NASID_NODEID(cnode);
        regaddr = REMOTE_HUB_ADDR(nasid, FPROM_CONFIG_ADDR);
        value = HUB_L(regaddr);
        value &= ~(FPROM_SETUP_MASK | FPROM_ENABLE_MASK);
        {
            value |= (((long)CONFIG_FPROM_SETUP << FPROM_SETUP_SHFT) |
                      ((long)CONFIG_FPROM_ENABLE << FPROM_ENABLE_SHFT));
        }
        HUB_S(regaddr, value);

    }
    return (errcode);
}