summaryrefslogtreecommitdiffstats
path: root/acc.asm
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2013-03-04 22:51:46 -0800
committerH. Peter Anvin <hpa@zytor.com>2013-03-04 22:51:46 -0800
commit796e816fb8eec0ddde4e1002ac0d913c57751918 (patch)
tree6cc711c438b3b16166b4d244b05a1ffd3640a168 /acc.asm
parent513bae9bfbe8d38c935e42ec6d192b83f9476e47 (diff)
downloadvirtio9p-796e816fb8eec0ddde4e1002ac0d913c57751918.tar.gz
virtio9p-796e816fb8eec0ddde4e1002ac0d913c57751918.tar.xz
virtio9p-796e816fb8eec0ddde4e1002ac0d913c57751918.zip
Rename *.S to *.asm to support case-insensitive filesystems
Allow building on case-insensitive filesystems by avoiding the *.S/*.s distinction.
Diffstat (limited to 'acc.asm')
-rw-r--r--acc.asm146
1 files changed, 146 insertions, 0 deletions
diff --git a/acc.asm b/acc.asm
new file mode 100644
index 0000000..23c0b4d
--- /dev/null
+++ b/acc.asm
@@ -0,0 +1,146 @@
+/* -*- asm -*- ----------------------------------------------------------- *
+ *
+ * Copyright 2013 H. Peter Anvin - All Rights Reserved
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall
+ * be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+#include "v9fs.h"
+
+ .code16
+ .section ".rtext","ax"
+
+/* ------------------------------------------------------------------------- *
+ * acc_always
+ *
+ * Always accept an incoming request.
+ * ------------------------------------------------------------------------- */
+
+ .globl acc_always
+acc_always:
+ clc
+ retw
+
+ .size acc_always,.-acc_always
+ .type acc_always,@function
+
+/* ------------------------------------------------------------------------- *
+ * acc_file
+ *
+ * Check drive in the System File Table
+ * ------------------------------------------------------------------------- */
+
+ .globl acc_file
+acc_file:
+ movw F_DI,%si
+ movw F_ES,%fs
+ addw $SFT_DEVINFO,%si /* Byte 5 in SFT entry = drive */
+ /* fall through */
+ .size acc_file,.-acc_file
+ .type acc_file,@function
+
+ /*
+ * Available for multiple users of a modified drive number
+ * at %fs:(%si) - specifically a zero-based drive number where
+ * bit 6 is expected to be set for a conforming redirector.
+ */
+acc_drive_common:
+ movb %fs:(%si),%al /* Device info word (low half) */
+ andb $0x5f,%al /* Drive number + conforming bit (6) */
+ incw %ax
+ cmpb drive_letter,%al
+ jne acc_fail
+ /* CF = 0 if equal */
+ retw
+ .size acc_drive_common,.-acc_drive_common
+ .type acc_drive_common,@function
+
+/* ------------------------------------------------------------------------- *
+ * acc_findnext
+ * ------------------------------------------------------------------------- */
+
+ .globl acc_findnext
+acc_findnext:
+ lfsw dos_sdafn,%si
+ addw $SDN_SEARCHDATA,%si /* First byte in srcrec = drive no */
+ jmp acc_drive_common
+
+ .size acc_findnext,.-acc_findnext
+ .type acc_findnext,@function
+
+/* ------------------------------------------------------------------------- *
+ * acc_never
+ *
+ * This is never for us; either we don't support it or we don't do
+ * anything with it anyway.
+ * ------------------------------------------------------------------------- */
+
+ .globl acc_never
+acc_never:
+acc_fail: /* Used as common tail */
+ stc
+ retw
+
+ .size acc_never,.-acc_never
+ .type acc_never,@function
+
+ .globl fxn_unknown
+fxn_unknown = acc_never
+
+/* ------------------------------------------------------------------------- *
+ * acc_cds
+ *
+ * The SDA contains a copy of the CDS for the current access - use it to
+ * determine if this is for us.
+ * ------------------------------------------------------------------------- */
+
+ .globl acc_cds
+acc_cds:
+ lfsw dos_sdafn,%si
+ addw $SDN_CDS,%si
+ cmpw $CDS_MAGIC,%fs:CDS_DPBPTR(%si) /* Our magic? */
+ jne acc_fail
+ movb drive_letter,%al
+ cmpb %al,%fs:(CDS_PATH+0)(%si) /* Our drive letter? */
+ jne acc_fail
+ cmpw $0x5c3a,%fs:(CDS_PATH+1)(%si) /* Path starts with X:\? */
+ jne acc_fail
+ /* XXX: check for a character device */
+ /* CF = 0 if equal */
+ retw
+
+ .size acc_cds,.-acc_cds
+ .type acc_cds,@function
+
+/* ------------------------------------------------------------------------- *
+ * acc_qualify
+ * ------------------------------------------------------------------------- */
+
+ .globl acc_qualify
+acc_qualify:
+ movw F_SI,%si
+ movw F_DS,%fs
+ jmp acc_drive_common
+
+ .size acc_qualify,.-acc_qualify
+ .type acc_qualify,@function