Buffer config fixes from Arkady.

git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@863 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Bart Oldeman 2004-04-10 22:48:26 +00:00
parent 6ad8b415dd
commit ca11edc6fd
1 changed files with 35 additions and 33 deletions

View File

@ -908,12 +908,8 @@ STATIC void Config_Buffers(BYTE * pLine)
COUNT nBuffers; COUNT nBuffers;
/* Get the argument */ /* Get the argument */
if (GetNumArg(pLine, &nBuffers) == (BYTE *) 0) if (GetNumArg(pLine, &nBuffers))
return; Config.cfgBuffers = nBuffers;
/* Got the value, assign either default or new value */
Config.cfgBuffers =
(nBuffers < 0 ? nBuffers : max(Config.cfgBuffers, nBuffers));
} }
/** /**
@ -1697,43 +1693,45 @@ STATIC COUNT strcasecmp(REG BYTE * d, REG BYTE * s)
that saves some relocation problems that saves some relocation problems
*/ */
STATIC void config_init_buffers(int anzBuffers) STATIC void config_init_buffers(int wantedbuffers)
{ {
REG WORD i;
struct buffer FAR *pbuffer; struct buffer FAR *pbuffer;
unsigned wantedbuffers = anzBuffers; unsigned buffers = 0;
if (anzBuffers < 0) /* fill HMA with buffers if BUFFERS count >=0 and DOS in HMA */
{ if (wantedbuffers < 0)
wantedbuffers = anzBuffers = -anzBuffers; wantedbuffers = -wantedbuffers;
}
else if (HMAState == HMA_DONE) else if (HMAState == HMA_DONE)
{ buffers = (0xfff0 - HMAFree) / sizeof(struct buffer);
anzBuffers = (0xfff0 - HMAFree) / sizeof(struct buffer);
}
anzBuffers = max(anzBuffers, 6); if (wantedbuffers < 6) /* min 6 buffers */
if (anzBuffers > 99) wantedbuffers = 6;
if (wantedbuffers > 99) /* max 99 buffers */
{ {
printf("BUFFERS=%u not supported, reducing to 99\n", anzBuffers); printf("BUFFERS=%u not supported, reducing to 99\n", wantedbuffers);
anzBuffers = 99; wantedbuffers = 99;
} }
LoL->nbuffers = anzBuffers; if (wantedbuffers > buffers) /* more specified than available -> get em */
buffers = wantedbuffers;
LoL->nbuffers = buffers;
LoL->inforecptr = &LoL->firstbuf; LoL->inforecptr = &LoL->firstbuf;
{ {
size_t bytes = sizeof(struct buffer) * anzBuffers; size_t bytes = sizeof(struct buffer) * buffers;
pbuffer = HMAalloc(bytes); pbuffer = HMAalloc(bytes);
if (pbuffer == NULL) if (pbuffer == NULL)
{ {
pbuffer = KernelAlloc(bytes, 'B', 0); pbuffer = KernelAlloc(bytes, 'B', 0);
if (HMAState == HMA_DONE)
firstAvailableBuf = MK_FP(0xffff, HMAFree);
} }
else else
{ {
LoL->bufloc = LOC_HMA; LoL->bufloc = LOC_HMA;
LoL->deblock_buf = KernelAlloc(SEC_SIZE, 'B', 0); LoL->deblock_buf = KernelAlloc(SEC_SIZE, 'B', 0);
/* space in HMA beyond requested buffers available as user space */
firstAvailableBuf = pbuffer + wantedbuffers;
} }
} }
@ -1742,18 +1740,19 @@ STATIC void config_init_buffers(int anzBuffers)
DebugPrintf(("init_buffers (size %u) at", sizeof(struct buffer))); DebugPrintf(("init_buffers (size %u) at", sizeof(struct buffer)));
DebugPrintf((" (%p)", LoL->firstbuf)); DebugPrintf((" (%p)", LoL->firstbuf));
pbuffer->b_prev = FP_OFF(pbuffer + (anzBuffers-1)); buffers--;
for (i = 1; i < anzBuffers; ++i) pbuffer->b_prev = FP_OFF(pbuffer + buffers);
{ {
if (i == wantedbuffers) int i = buffers;
do
{ {
firstAvailableBuf = pbuffer; pbuffer->b_next = FP_OFF(pbuffer + 1);
} pbuffer++;
pbuffer->b_next = FP_OFF(pbuffer + 1); pbuffer->b_prev = FP_OFF(pbuffer - 1);
pbuffer++; }
pbuffer->b_prev = FP_OFF(pbuffer - 1); while (--i);
} }
pbuffer->b_next = FP_OFF(pbuffer - (anzBuffers-1)); pbuffer->b_next = FP_OFF(pbuffer - buffers);
/* now, we can have quite some buffers in HMA /* now, we can have quite some buffers in HMA
-- up to 50 for KE38616. -- up to 50 for KE38616.
@ -1764,8 +1763,11 @@ STATIC void config_init_buffers(int anzBuffers)
DebugPrintf((" done\n")); DebugPrintf((" done\n"));
if (FP_SEG(pbuffer) == 0xffff) if (FP_SEG(pbuffer) == 0xffff)
{
buffers++;
printf("Kernel: allocated %d Diskbuffers = %u Bytes in HMA\n", printf("Kernel: allocated %d Diskbuffers = %u Bytes in HMA\n",
anzBuffers, anzBuffers * sizeof(struct buffer)); buffers, buffers * sizeof(struct buffer));
}
} }
STATIC void config_init_fnodes(int f_nodes_cnt) STATIC void config_init_fnodes(int f_nodes_cnt)