예제 #1
0
            public override void Visit(AmlParser.DefBankField defBankField)
            {
                Node operationRegionNode = acpiNamespace.LookupNode(defBankField.regionName.nodePath, currentPath);

                CheckObjectType(operationRegionNode.Value, AcpiObjectType.OperationRegion);

                // TODO: BankFields are not used in the test files and appear to involve some kind of
                // "bank selection register". Need to understand this properly to implement it, but for
                // leaving unimplemented. Commented out below is some code to use as a starting point.

                throw new LoadException("BankField unimplemented");

    #if false
                AccessType   accessType   = defBankField.fieldFlags.accessType;
                AccessAttrib accessAttrib = AccessAttrib.SMBNone;
                int          bitIndex     = 0;
                foreach (FieldElement fieldElement in defBankField.fieldList)
                {
                    switch (fieldElement.Tag)
                    {
                    case FieldElement.TagValue.NamedField:
                        AmlParser.NamedField namedField = fieldElement.GetAsNamedField();
                        Node node = acpiNamespace.LookupNode(
                            new NodePath(false /*isAbsolute*/, 0, new string[] { namedField.nameSeg.data }),
                            currentPath);
                        node.Value = new FieldUnit((AcpiObject.OperationRegion)operationRegionNode.Value,
                                                   bitIndex, namedField.bitWidth,
                                                   accessType, accessAttrib,
                                                   defBankField.fieldFlags.lockRule,
                                                   defBankField.fieldFlags.updateRule);
                        bitIndex += namedField.bitWidth;
                        break;

                    case FieldElement.TagValue.ReservedField:
                        AmlParser.ReservedField reservedField = fieldElement.GetAsReservedField();
                        bitIndex += reservedField.bitWidth;
                        break;

                    case FieldElement.TagValue.AccessField:
                        AmlParser.AccessField accessField = fieldElement.GetAsAccessField();
                        accessType   = accessField.accessType;
                        accessAttrib = accessField.accessAttrib;
                        break;

                    default:
                        throw new LoadException("Unhandled alternative in switch over 'FieldElement'");
                    }
                }
    #endif
            }
예제 #2
0
            public override void Visit(AmlParser.DefBankField defBankField)
            {
                foreach (FieldElement fieldElement in defBankField.fieldList)
                {
                    switch (fieldElement.Tag)
                    {
                    case FieldElement.TagValue.NamedField:
                        AmlParser.NamedField namedField = fieldElement.GetAsNamedField();
                        Node node = acpiNamespace.CreateNodeAt(
                            new NodePath(false /*isAbsolute*/, 0, new string[] { namedField.nameSeg.data }),
                            currentPath);
                        break;

                    default:
                        break;
                    }
                }
            }
예제 #3
0
 public virtual void Visit(AmlParser.DefBankField defBankField)
 {
     UnhandledNodeType("DefBankField");
 }