Ejemplo n.º 1
0
static void chsc_process_event_information(struct chsc_sei *sei, u64 ntsm)
{
    do {
        memset(sei, 0, sizeof(*sei));
        sei->request.length = 0x0010;
        sei->request.code = 0x000e;
        sei->ntsm = ntsm;

        if (chsc(sei))
            break;

        if (sei->response.code != 0x0001) {
            CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x)\n",
                          sei->response.code);
            break;
        }

        CIO_CRW_EVENT(2, "chsc: sei successful (nt=%d)\n", sei->nt);
        switch (sei->nt) {
        case 0:
            chsc_process_sei_nt0(&sei->u.nt0_area);
            break;
        case 2:
            chsc_process_sei_nt2(&sei->u.nt2_area);
            break;
        default:
            CIO_CRW_EVENT(2, "chsc: unhandled nt: %d\n", sei->nt);
            break;
        }
    } while (sei->u.nt0_area.flags & 0x80);
}
Ejemplo n.º 2
0
static void chsc_process_event_information(struct chsc_sei *sei, u64 ntsm)
{
	static int ntsm_unsupported;

	while (true) {
		memset(sei, 0, sizeof(*sei));
		sei->request.length = 0x0010;
		sei->request.code = 0x000e;
		if (!ntsm_unsupported)
			sei->ntsm = ntsm;

		if (chsc(sei))
			break;

		if (sei->response.code != 0x0001) {
			CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x, ntsm=%llx)\n",
				      sei->response.code, sei->ntsm);

			if (sei->response.code == 3 && sei->ntsm) {
				/* Fallback for old firmware. */
				ntsm_unsupported = 1;
				continue;
			}
			break;
		}

		CIO_CRW_EVENT(2, "chsc: sei successful (nt=%d)\n", sei->nt);
		switch (sei->nt) {
		case 0:
			chsc_process_sei_nt0(&sei->u.nt0_area);
			break;
		case 2:
			chsc_process_sei_nt2(&sei->u.nt2_area);
			break;
		default:
			CIO_CRW_EVENT(2, "chsc: unhandled nt: %d\n", sei->nt);
			break;
		}

		if (!(sei->u.nt0_area.flags & 0x80))
			break;
	}
}