Exemple #1
0
        // u32 smu_service_req(smu_t smu, u32 id, smu_service_args_t *args);
        public smu_response SMUServiceReq(smu_t smu, Messages id, smu_service_args_t args)
        {
            smu_response serviceResponse = new smu_response();
            uint         response        = 0x0;

            //smu_service_args_t args = *inArgs;

            // Debug information.
            Console.WriteLine("SMU_SERVICE REQ_ID: 0x{0:X}", id);
            Console.WriteLine("SMU_SERVICE REQ: arg0: 0x{0:X}, arg1: 0x{1:X}, arg2: 0x{2:X}, " +
                              "arg3: 0x{3:X}, arg4: 0x{4:X}, arg5: 0x{5:X}",
                              args.arg0, args.arg1, args.arg2, args.arg3, args.arg4, args.arg5);


            // Clear the response.
            hwOps.smn_reg_write(smu.nb, smu.rep, 0x0);

            // Pass arguments.
            hwOps.smn_reg_write(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 0), args.arg0);
            hwOps.smn_reg_write(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 1), args.arg1);
            hwOps.smn_reg_write(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 2), args.arg2);
            hwOps.smn_reg_write(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 3), args.arg3);
            hwOps.smn_reg_write(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 4), args.arg4);
            hwOps.smn_reg_write(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 5), args.arg5);

            // Send message ID.
            hwOps.smn_reg_write(smu.nb, smu.msg, (uint)id);

            // Wait until response has changed.
            //while (response == 0x0)
            //{
            //    response = hwOps.smn_reg_read(smu.nb, smu.rep);
            //}
            do
            {
                response = hwOps.smn_reg_read(smu.nb, smu.rep);
            } while (response == 0x0);

            // Read back arguments.
            args.arg0 = hwOps.smn_reg_read(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 0));
            args.arg1 = hwOps.smn_reg_read(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 1));
            args.arg2 = hwOps.smn_reg_read(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 2));
            args.arg3 = hwOps.smn_reg_read(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 3));
            args.arg4 = hwOps.smn_reg_read(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 4));
            args.arg5 = hwOps.smn_reg_read(smu.nb, C2PMSG_ARGx_ADDR(smu.arg_base, 5));

            // Response.
            Console.WriteLine("SMU_SERVICE REP: REP: 0x{0:X}, arg0: 0x{1:X}, arg1: 0x{2:X}, arg2: 0x{3:X}, " +
                              "arg3: 0x{4:X}, arg4: 0x{5:X}, arg5: 0x{6:X}",
                              response, args.arg0, args.arg1, args.arg2, args.arg3, args.arg4, args.arg5);

            Console.WriteLine(args.arg0);

            // Create smu_response object.
            serviceResponse.response = response;
            serviceResponse.args     = args;

            //return response;
            return(serviceResponse);
        }
Exemple #2
0
        // void free_nb(nb_t nb);


        // SMU related methods.

        // smu_t get_smu(nb_t nb, int smu_type);
        public smu_t GetSMU(uint nb, SMU_TYPE smu_type)
        {
            // Create new SMU structure.
            smu_t smu = new smu_t();

            // Test message response and arguments.
            //uint rep;
            smu_service_args_t arg = new smu_service_args_t();

            // Fill the SMU information.
            smu.nb = nb;

            switch (smu_type)
            {
            case SMU_TYPE.TYPE_MP1:
                smu.msg      = MP1_C2PMSG_MESSAGE_ADDR;
                smu.rep      = MP1_C2PMSG_RESPONSE_ADDR;
                smu.arg_base = MP1_C2PMSG_ARG_BASE;
                break;

            case SMU_TYPE.TYPE_PSMU:
                smu.msg      = PSMU_C2PMSG_MESSAGE_ADDR;
                smu.rep      = PSMU_C2PMSG_RESPONSE_ADDR;
                smu.arg_base = PSMU_C2PMSG_ARG_BASE;
                break;

            default:
                Console.WriteLine("Failed to get SMU, unknown SMU_TYPE: " + smu_type);
                break;
            }

            // Send a test message.
            SMUResponseCode resp = (SMUResponseCode)SMUServiceReq(smu, Messages.TestMessage, arg).response;

            if (resp != SMUResponseCode.Result_OK)
            {
                Console.WriteLine("Failed to get SMU: {0}, test message REP: {1}", smu_type, resp);
            }

            Console.WriteLine("SMU_TYPE: {0}, Test message response: {1}", smu_type, resp);
            return(smu);
        }